【发布时间】:2012-03-02 03:19:09
【问题描述】:
我正在尝试使用 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
服务器端
1.Create server socket and wait for incoming connections
2.Parse incoming request
3.Send response
4.Parse next request
5.Send next response
当会话处于活动状态时,我不会关闭双方的套接字和流。
更新 这是我的代码sn-p: 客户
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
【问题讨论】:
-
贴出相关代码sn-ps -- 对不可见的代码很难提出建议。 :)
-
你写了两面,你肯定可以在服务器上附加一个调试器,看看第二个请求到达时会发生什么?
-
已发布必要的代码 sn-ps 和调试器输出 :)
标签: java sockets tcp persistent