当套接字读取超时时,java库如何处理接收到的数据?

当套接字读取超时时,java库如何处理接收到的数据?,java,networking,tcp,Java,Networking,Tcp,如果套接字读取超时(连接未关闭)并且稍后的操作系统接收到数据,java库如何处理数据 连接池中有两个tcp连接/套接字。一个线程读取超时并返回(释放到连接池的连接),然后另一个线程使用相同的连接;然后,另一个thead可能接收第一个线程的响应数据。我认为这是不对的。当两个线程依次使用相同的连接时,java库(例如httpclint)如何防止另一个线程接收前一个线程请求的响应数据 谢谢 这取决于您在这里接收的数据类型。如果它严格基于哪个线程将处理接收到的数据,那么您需要确保使用某种GUID和线程I

如果套接字读取超时(连接未关闭)并且稍后的操作系统接收到数据,java库如何处理数据

连接池中有两个tcp连接/套接字。一个线程读取超时并返回(释放到连接池的连接),然后另一个线程使用相同的连接;然后,另一个thead可能接收第一个线程的响应数据。我认为这是不对的。当两个线程依次使用相同的连接时,java库(例如httpclint)如何防止另一个线程接收前一个线程请求的响应数据


谢谢

这取决于您在这里接收的数据类型。如果它严格基于哪个线程将处理接收到的数据,那么您需要确保使用某种GUID和线程ID组合来标识数据,以便发送方和接收方知道消息已被使用或丢失。理想情况下,您不应该出现逻辑依赖于底层线程的情况,除非该逻辑特定于操作系统层。

当存在读取超时时,没有收到数据。而是有一个读取超时。这回答了“Java库如何处理…”部分。您所描述的“连接池中有两个连接/套接字”,其中两个套接字相同的情况是不现实的。显然,超时套接字应该已关闭,而不是返回到连接池。@user207421 Thx。“显然,超时套接字应该已关闭,而不是返回到连接池”-是否有引用?我以前从未听说过这样的话。@user207421我读过关于ApacheHttpClient的相关源代码,对。当HttpRequestExecutor遇到异常(运行时/IO/Http异常)时,它关闭了连接(清除输入缓冲区和刷新输出缓冲区)。但有点奇怪的是,即使连接没有关闭,现在对等方也无法向套接字发送数据。也许我应该深入一点。你“以前从未遇到过这样的说法”,因为这是显而易见的。无需参考。导致读取超时的套接字可能有也可能没有与先前事务相关的传入数据,实际上可能有也可能没有正常工作的对等方,因此将其返回到池中毫无意义。而且“即使连接没有关闭,现在对等方也无法向其发送数据”完全是不真实的。您在这里试图解决的实际问题是什么?@user207421没有实际问题,lol。“即使连接未关闭,对等方也无法将数据发送到套接字”我的意思是,对等方在连接读取超时发生(连接未关闭)后无法发送数据。我刚刚调试了ApacheHttpClient的一个演示。套接字读取超时,当前线程在closeConnection()调用的断点处挂起,然后对等方发送数据。10秒后恢复挂起的线程,但是对等线程总是抛出连接关闭异常。