Javaを使用してソケットを学習しようとしていますが、自分のマシンで実行されているServerSocketにデータを正常に送信しました。 readlineを使ってこのソケットから読み込もうとすると(私は自分の送信したメッセージをエコーすることができます)、プログラムがハングして戻りません。BufferedReader readLineメソッドがハングしてプログラムをブロックします
は、ここでは、コードです:
public static void main(String[] args) throws UnknownHostException, IOException {
TCPClient cli = new TCPClient("127.0.0.1", "15000");
try {
cli.ostream.writeUTF("Teste");
String echo = cli.istream.readLine(); //it hangs in this line
System.out.println(echo);
}
れるtcpClientは、私はので、私は私のhomweworkにスイングを使用する前に、シンプルなインターフェイスで、私のプログラムをテストすることができます定義されたクラスです。ここにコードがあります:
public class TCPClient {
public DataOutputStream ostream = null;
public BufferedReader istream = null;
public TCPClient(String host, String port) throws UnknownHostException {
InetAddress ip = InetAddress.getByName(host);
try {
Socket socket = new Socket(host, Integer.parseInt(port));
ostream = new DataOutputStream(socket.getOutputStream());
istream = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException ex) {
Logger.getLogger(TCPClient.class.getName()).log(Level.SEVERE, null, ex);
}
}
私のサーバーはかなりシンプルです。接続が確立された後、このループに入り、(無限ループのために)クライアントを閉じるまでここにとどまります。その後、例外処理によって接続が開始される前の時点に戻ります。
while(true){
String msg = istream.readLine();
System.out.println("Arrived on server: " + msg); //just works on debug
ostream.writeUTF("ACK: " + msg);
ostream.flush();
}
私は何が欠けているのか分かりません。
PS:サーバーをデバッグすると、そこに到着するメッセージが表示されます(たとえば印刷できます)。しかし、このコードを実行するだけではこれはできません。これは私が見落としているいくつかの同時実行関係を持っていますか?
THX
サーバーは何をしていますか?あなたのメッセージに何も応答しない場合、またはその書き込みをフラッシュしない場合、もちろん、クライアントはサーバから回線が送信されるまで無期限に待機します。 –
メッセージをエコーしながらサーバの無限ループで投稿を編集します –