我正在尝试在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)
答案 0 :(得分:2)
显然,它不是TCP服务器握手,而是特定于应用程序的第7层握手。连接套接字时,已执行3次握手并连接套接字。你所做的就是以可靠的方式进行简单的数据交换。
回到你的问题,被抛出的异常清楚地表明你无法写入套接字服务器。
为什么呢?可能有多种原因:
如此精心制作或尝试自己,祝你好运。