- ベストアンサー
ソケット:書き出しをソケット経由で読み込みできない
お世話になります。 今、Javaでのソケットプログラミングについて学習をはじめて、はじめてのサンプルプログラムが失敗しました。 そこでもうちょっと簡単にしてみたのですが(一部の抜粋が以下のソースです)、またまたうまくいきません。 エコーサーバのテストなのですが、client : after send messageと表示されたところで処理が止まってしまいます。 結果は最下位に貼り付けてあります。 どうかよろしくお願いします。 // reader/writerの取得 BufferedWriter clientWriter = new BufferedWriter( new OutputStreamWriter(sockClient.getOutputStream()), BUFFERSIZE); BufferedReader clientReader = new BufferedReader( new InputStreamReader(sockClient.getInputStream()), BUFFERSIZE); BufferedWriter serverWriter = new BufferedWriter( new OutputStreamWriter(sockServer.getOutputStream()), BUFFERSIZE); BufferedReader serverReader = new BufferedReader( new InputStreamReader(sockServer.getInputStream()), BUFFERSIZE); // サーバのローカルとクライアントの接続先が同じことの確認 System.out.println("client port : " + sockClient.getPort()); System.out.println("client addr : " + sockClient.getInetAddress().getHostAddress()); System.out.println("server port : " + sockServer.getLocalPort()); System.out.println("server addr : " + sockServer.getLocalAddress().getHostAddress()); // クライアント→サーバー→クライアントの順にmaaaaaいうえおを送信 String strMessage = "maaaaaいうえお"; System.out.println("client : send message : " + strMessage); clientWriter.write(strMessage); System.out.println("client : after send message"); String msgGet = serverReader.readLine(); System.out.println("server : got : " + msgGet); serverWriter.write(msgGet); System.out.println("client : got : " + clientReader.readLine()); ------------以下が結果------------- client port : 4544 client addr : 127.0.0.1 server port : 4544 server addr : 127.0.0.1 client : send message : maaaaaいうえお client : after send message
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
その他の回答 (1)
- rinkun
- ベストアンサー率44% (706/1571)
お礼
解決しました。ありがとうございました。 readLine()メソッドは、改行文字が検出されるまでブロックしながらバッファに読み込むので、改行文字をちゃんと送ってやらないと、ずっとブロックし続けてしまうみたいですね。 ・・・これで前進できます。ありがとうございました。 あと、回答者:rinkunさんの指摘にあったように、質問の書き方がまずかったと思います。次回からは気をつけますので、よろしくお願いします。 -------------そのことの確認ソース--------------------- PipedReader pr = new PipedReader(); PipedWriter pw = new PipedWriter(pr); BufferedReader reader = new BufferedReader(pr); BufferedWriter writer = new BufferedWriter(pw); writer.write("あいうえお"); writer.newLine(); writer.write("かきくけこ"); writer.newLine(); writer.flush(); // writer.newLine()がないとブロックされてとまってしまう while (reader.ready()) { System.out.println(reader.readLine()); } writer.close(); reader.close();