草庐IT

shutdownOutput

全部标签

java - socket.shutdownOutput() 的目的

我正在使用下面的代码将数据发送到TCP服务器。我假设我需要使用socket.shutdownOutput()来正确指示客户端已完成发送请求。我的假设正确吗?如果不是,请告诉我shutdownOutput()的用途。也感谢我可以进行的任何进一步优化。客户端defaddress=newInetSocketAddress(tcpIpAddress,tcpPortasInteger)clientSocket=newSocket()clientSocket.connect(address,FIVE_SECONDS)clientSocket.setSoTimeout(FIVE_SECONDS)//

java - Netty socket.shutdownOutput() 等同于避免 TCP RST?

我想知道是否有一种方法可以避免在Netty中关闭连接时设置TCPRST标志而不是TCPFIN标志,因为TCP接收缓冲区中仍有输入数据。用例是:客户端(用C语言编写)发送包含很多字段的数据包。服务器读取数据包,在早期字段上遇到错误,抛出异常。异常处理程序捕获异常,写入错误消息,并将关闭写入回调添加到写入future。问题是:接收缓冲区中的剩余数据导致Linux(或Java..)使用RST标志标记TCP数据包。这可以防止客户端读取数据,因为当它开始尝试时发现由于套接字关闭而导致读取错误。对于直接的Java套接字,我相信解决方案是在关闭之前调用socket.shutdownOutput()。