Java维护持久的TCP连接
我试图使用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
当会话处于活动状态时,我不会关闭双方的套接字和流。
更新这是我的代码片段:客户端
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
我认为问题在于您的客户端代码。 你写了:
String requestLine = "This is request message 1" + CRLF; ..... outToServer.writeBytes(requestLine + CRLF);
您将CRLF添加到requestLine,并在将其发送到服务器时再次添加它。 确保每个要发送的邮件只添加一次CRLF,它将按您的意愿运行。
- Spring中的Websocket身份validation和授权
- 在java中的两个字符串之间提取字符串
- 在运行时SwingvalidationEvent Dispatch Thread上的代码
- JComboBox对象实例中的项
- Java代理开发框架 – Eclipse和Maven集成
- 一个java控制台程序,它将十进制转换为二进制而不使用预定义的方法(for)
- Spring Cloud Configuration Server无法使用本地属性文件
- java.security.NoSuchAlgorithmException:找不到任何支持AES / ECB / PKCS7PADDING的提供程序
- 你如何制作菜单项(JMenuItem)的快捷方式?