-1

我正在尝试在 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)
4

1 回答 1

2

显然,它不是 TCP 服务器握手,而是特定于应用程序的第 7 层握手。当您连接套接字时,已经执行了 3 次握手并连接了套接字。您在此之上所做的只是以可靠的方式简单地交换数据。

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

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

  1. 套接字服务器未按应有的方式运行。
  2. 您没有写入套接字服务器,例如在第一次写入之后,在您的循环中,您可能会丢失对套接字对象的跟踪并写入空对象等。

所以详细说明或只是尝试自己,祝你好运。

于 2013-07-05T14:44:01.150 回答