繁体   English   中英

Java Socket:为什么套接字没有“写超时”

[英]Java Socket:why is there is no “write timeout” for the socket

有传递给connect方法的连接超时值,有使用setSoTimeout方法设置的读取超时值。 我想知道为什么没有设置“写入超时”的方法? 我认为TCP协议中有写超时的概念。

不会有多大用处。

通常,TCP 发送与应用程序是异步的。 send()所做的只是将数据放入套接字发送缓冲区。 然后它返回,同时发送缓冲区被异步清空到网络。 所以没有什么可以超时的。 并且没有超时并不表示数据已发送到对等方。

send()在发送缓冲区已满时阻塞并且可以在其上实现超时,实际上您可以使用select()在非阻塞模式下自己做到这一点,但问题是超时可能是当前发送或前一个发送。 因此,提供超时会相当混乱。 相反,当所有 TCP 发送计时器在内部超时时传递的是连接重置。

我认为TCP协议中有写超时的概念。

确实有,但那是在 TCP 异步清空套接字发送缓冲区的级别。 它不受应用程序控制。

您可以先尝试连接...如果连接失败捕获异常

InetSocketAddress sockAdr = new InetSocketAddress(serveradres, 2222);
Socket newsok = new Socket();
int timeout = 2000;
newsok.connect(sockAdr, timeout);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM