Java のネットワーキングと io について学習しているので、さまざまなチュートリアルで読んでいることを適用するクライアント/サーバー アプリをゆっくりと構築しています。私は困惑していますが、コードが長い間機能しない理由を理解しようとしています。だから私はSOの無限の知恵に目を向けることにしました:)
localhost からのクライアント ソケット接続を受け入れた後、サーバーに次のように表示されます。
BufferedInputStream in = new BufferedInputStream(socket.getInputStream(),Config.BUFFER_SIZE_NET);
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream(),Config.BUFFER_SIZE_NET);
String msg = "";
byte buffer[] = new byte[Config.BUFFER_SIZE_READ];
int bytesRead;
System.out.println("Server is waiting for data");
while ((bytesRead = in.read(buffer)) > 0) {
msg = msg + new String(buffer,Config.CHARSET);
}
System.out.println("Server received: "+msg);
サーバーに接続した後、JButton を押すと、これがクライアントで実行されます。
BufferedInputStream in = new BufferedInputStream(socket.getInputStream(),Config.BUFFER_SIZE_NET);
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream(),Config.BUFFER_SIZE_NET);
String msg = "msg";
try{
out.write(msg.getBytes(Config.CHARSET));
out.flush();
System.out.println("Client sent: "+msg);
}catch(Throwable e){e.printStackTrace();}
クライアントのボタンを押すと、次の出力が得られます。
Client sent: msg
サーバー側では、次のようになります。
Server is waiting for data
サーバーをデバッグすると、次の行で永久にブロックされていることがわかります。
while ((bytesRead = in.read(buffer)) > 0) {
例外はスローされません。ここで何が欠けていますか?以前は動作していましたが、多くの変更を行ったため、元に戻すことができません。
注: これは、レビューしやすいように、実際のコードをわずかに変更したバージョンです。関連するものが不足していると思われる場合は、お知らせください。