关于java网络编程client端提示SocketException
大家讲道理
大家讲道理 2017-04-18 10:47:10
0
2
592
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(2)
洪涛

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

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

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

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

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

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

短い接続

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

いいねを押す +0
伊谢尔伦

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!