传递给connect方法的连接超时值,并且使用setSoTimeout方法设置了读取超时。我想知道为什么没有方法来设置“写入超时”?我认为TCP协议中存在写超时概念。
答案 0 :(得分:4)
它不会有多大用处。
通常,TCP发送与应用程序是异步的。 send()
所做的就是将数据放入套接字发送缓冲区。然后它返回,而发送缓冲区异步清空到网络。所以没有什么可以超时的。没有超时并不表示数据已发送给对等方。
send()
阻止,而发送缓冲区已满,并且可以实现超时,实际上您可以使用{{非阻塞模式自行执行此操作1}},但问题是超时可能是当前发送还是先前发送。因此,提供超时会相当混乱。相反,当所有TCP发送定时器在内部超时时传送的内容是连接重置。
我认为TCP协议中存在写入超时概念。
确实存在,但是在TCP异步清空套接字发送缓冲区的级别上。它不受应用程序控制。
答案 1 :(得分:0)
您可以首先尝试连接...如果连接失败捕获异常
InetSocketAddress sockAdr = new InetSocketAddress(serveradres, 2222);
Socket newsok = new Socket();
int timeout = 2000;
newsok.connect(sockAdr, timeout);