Java maintaining a persistent TCP connection

 ̄綄美尐妖づ 提交于 2019-12-05 10:13:08

问题


I am trying to send multiple data from server to client using TCP. I want to create only one TCP connection for the entire session. How do I go about doing this?

I tried a code with the following flow, but the program stops after the first response is received.

Client side

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

Server side

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

I do not close the sockets and streams on both sides while the session is alive.

Update Here is my code snippet: Client

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();
}

Server

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);
}

Output

Client:

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

Server:

This is request message 1

null
java.net.SocketException: Broken pipe

回答1:


I think the problem is in your client code. You wrote:

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

You add CRLF to requestLine, and add it again when send it to server. Ensure that adding CRLF only once per message you want to send, it will behave as you want.



来源:https://stackoverflow.com/questions/9527515/java-maintaining-a-persistent-tcp-connection

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!