java中TCP服务器和客户端之间的四路消息交换

时间:2013-07-05 12:48:18

标签: java tcpclient

我正在尝试在TCP客户端和服务器之间实现四向消息交换,其中服务器首先发送消息,从客户端接收回复,然后再次执行相同操作。这可以扩展到更多的消息。如何保持两者之间的连接畅通?如果应该有一个无限的while循环,把它放在哪里?我在客户端尝试了这个并且出错了。我不关心这里的服务器!

// open socket

while(true) {
// read
// send reply
}

clientSocket.close();

问题是对于服务器发送的同一消息,缓冲区被读取两次,然后出现此错误:

Exception in thread "main" java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.DataOutputStream.write(Unknown Source)
at java.io.FilterOutputStream.write(Unknown Source)
at TCPClient.main(TCPClient.java:52)

1 个答案:

答案 0 :(得分:2)

显然,它不是TCP服务器握手,而是特定于应用程序的第7层握手。连接套接字时,已执行3次握手并连接套接字。你所做的就是以可靠的方式进行简单的数据交换。

回到你的问题,被抛出的异常清楚地表明你无法写入套接字服务器。

为什么呢?可能有多种原因:

  1. 套接字服务器的行为方式不应该如此。
  2. 您没有写入套接字服务器,例如在第一次写入之后,在您的循环中,您可能会丢失跟踪套接字对象并写入空对象等。
  3. 如此精心制作或尝试自己,祝你好运。