検索

ホームページ  >  に質問  >  本文

关于java网络编程client端提示SocketException

大家讲道理大家讲道理2802日前621

全員に返信(2)返信します

  • PHP中文网

    PHP中文网2017-04-18 10:49:10

    修正してください:
    問題の考えられるキーポイント: クライアントは accept() を 1 回だけ実行し、出力ストリームを閉じません

    1. クライアントは clientSocket インスタンスを維持し (connect は 1 回だけ呼び出されます)、サーバーは ServerSocket インスタンスを維持します。 1 つのクライアント ソケットを維持し、2 番目の入力処理を期待しているだけで、長い接続に備えているようです。

    出力ストリームが閉じられると、出力ストリームに対応するソケットも閉じられます - 『クレイジーJava講義ノート(第3版)』p786

    2. サーバーを見下ろしてみましょう。 ss.accept() は複数のクライアント接続を処理するためのループ内に配置されています。ちなみに、クライアントごとに読み取り操作があり、その後の読み取り操作はありません。これが問題である可能性があります。

    短い接続ですか、それとも長い接続ですか? 連続して複数の通信を行う場合は、1つの接続で複数回の読み取りと書き込み(長い接続)を使用することも、複数の接続で1回の接続ごとに1回の読み取りと書き込み(短い接続)を使用することもできます
    クライアントは長い接続を望んでいますが、サーバー は短い接続を望んでいるように見えます。提案:

    長い接続: クライアントは変更されず、サーバーはクライアントごとに 1 回だけ accept() を実行し、複数の入力通信をループで処理し、 ストリームを監視しますが、ソケットは閉じません。

    短い接続

    : クライアントが新しいソケット接続を開始する (新しいソケット インスタンスを作成する) たび、操作が完了するたびに、 ストリームを閉じてソケットを閉じます。サーバーのループ本体は変更されず、ストリームはループ本体内で閉じられ、毎回 accept() によって返されるソケットは閉じられます。 自分のビジネスを知らないため、コードの本当の意図がわかりません。さらに拡張する価値のあるその他の点は次のとおりです: マルチクライアント接続、複数接続、セッション管理、同時実行性など。

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:49:10

    while ループでコードを閉じるたびに、コードをよく見ることができます。

    返事
    0
  • キャンセル返事