Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java维护持久的TCP连接_Java_Sockets_Tcp_Persistent - Fatal编程技术网

Java维护持久的TCP连接

Java维护持久的TCP连接,java,sockets,tcp,persistent,Java,Sockets,Tcp,Persistent,我正在尝试使用TCP将多个数据从服务器发送到客户端。我只想为整个会话创建一个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 req

我正在尝试使用TCP将多个数据从服务器发送到客户端。我只想为整个会话创建一个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
会话处于活动状态时,我不会关闭两侧的套接字和流

更新 以下是我的代码片段: 客户

服务器

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

我认为问题在于你的客户代码。你写道:

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

您将CRLF添加到requestLine,并在将其发送到服务器时再次添加它。确保每个要发送的邮件只添加一次CRLF,它将按照您的要求运行。

发布相关的代码片段——很难对不可见的代码提出建议。:)您编写了两个方面,当然可以将调试器附加到服务器,并观察第二个请求到达时发生的情况?已经发布了必要的代码片段和调试器输出:)非常感谢!这确实是我的代码的问题所在-我花了几个小时的调试才找到答案!
This is request message 1

null
java.net.SocketException: Broken pipe
    String requestLine = "This is request message 1" + CRLF;
    .....
    outToServer.writeBytes(requestLine + CRLF);