2012-03-02 8 views
1

私は、TCPを使用してサーバからクライアントに複数のデータを送信しようとしています。セッション全体に対して1つのTCP接続のみを作成します。これをどうやって行うのですか?Javaが永続的なTCP接続を維持しています

次のフローでコードを試しましたが、最初の応答が受信された後にプログラムが停止します。

クライアント側

1.create sockets and streams 
2.send request for first data 
3.wait for response from server 
4.send next request <----------- server doesn't seem to handle this request 
5.get next response from server 

サーバー側

1.Create server socket and wait for incoming connections 
2.Parse incoming request 
3.Send response 
4.Parse next request 
5.Send next response 

セッションが生きている間、私は両側のソケットとストリームを閉じないでください。ここで更新

は私のコードスニペットです: クライアント

public void processRequest() throws Exception { 

    Socket tempSocket = new Socket("0.0.0.0", 6782); 

    String requestLine = "This is request message 1" + CRLF; 

    DataOutputStream outToServer = new DataOutputStream(tempSocket.getOutputStream());    
    BufferedReader inFromServer = new BufferedReader(new InputStreamReader(tempSocket.getInputStream())); 

    outToServer.writeBytes(requestLine + CRLF); 

    String serverResponse = inFromServer.readLine(); 
    System.out.println(serverResponse); 

    requestLine = "This is request message 2" + CRLF; 

    outToServer.writeBytes(requestLine + CRLF); 

    serverResponse = inFromServer.readLine(); 
    System.out.println(serverResponse); 

    outToServer.close(); 
    inFromServer.close(); 
    tempSocket.close(); 
} 

サーバー

public void processRequest() throws Exception { 

    createConnections(); 

    String requestLine = inFromClient.readLine(); 
    System.out.println(requestLine); 

    String responseLine = "This is the response to messsage 1"; 
    outToClient.writeBytes(responseLine + CRLF); 

    requestLine = inFromClient.readLine(); 
    System.out.println(requestLine); 

    responseLine = "This is the response to message 2"; 
    outToClient.writeBytes(responseLine + CRLF); 
} 

出力

クライアント:

This is the response to messsage 1 
This is the response to message 2 
BUILD SUCCESSFUL (total time: 1 second) 

サーバー:

This is request message 1 

null 
java.net.SocketException: Broken pipe 
+3

関連するコードスニペットを投稿する - 目に見えないコードの提案をするのは難しいです。 :) – sarnold

+0

あなたは両側を書きました。確かに、デバッガをサーバに接続して、2番目のリクエストが到着したときに何が起こるのかを確認できますか? –

+0

必要なコードスニペットとデバッガ出力を投稿しました:) – shyamsundar2007

答えて

2

は、私はこの問題は、クライアントコードであると思います。

String requestLine = "This is request message 1" + CRLF; 
    ..... 
    outToServer.writeBytes(requestLine + CRLF); 

CRLFをrequestLineに追加し、サーバーに送信するときにもう一度追加します。送信するメッセージごとに1回だけCRLFを追加することを忘れないようにしてください。

+0

ありがとう!それは本当に私のコードの問題でした.-それを見つけるために私は数時間のデバッグをしました! – shyamsundar2007

関連する問題