Java Socket.setSoTimeout() 在连接时不会超时

标签 java sockets timeout

我有一个问题,我使用 setSoTimeout(500) 将连接超时设置为 0.5 秒并读取时间延迟,但它实际上没有工作,而是在大约 10 秒后超时就像它通常对这种异常所做的那样。是的,IP 在这种情况下是有效的。

java.net.ConnectException: Connection timed out: connect

代码如下:

try {
    Socket sock = new Socket(ip, 42042);
    sock.setSoTimeout(500);
    BufferedInputStream is = new BufferedInputStream(sock.getInputStream());
    theNames = theNames + is.read() + ";";
    PrintWriter os = new PrintWriter(sock.getOutputStream());
} catch (IOException e) {
    System.out.println(e + " | Le serveur a " + ip + " ne reponds pas.");
}

最佳答案

Socket.setSoTimeout 设置读取超时。它与连接超时无关。如果您想降低默认连接超时:

Socket sock = new Socket();
sock.connect(new InetSocketAddress(ip, 42042), timeout);

timeout 以毫秒为单位。

注意:Javadoc说“超时为零被解释为无限超时”,但这不正确:它被解释为平台默认连接超时,大约一分钟。无限超时仅适用于读取。另请注意,您可以使用 connect()减少平台默认值,但不能增加它。

半秒对于连接超时或读取超时来说都太短了。

关于Java Socket.setSoTimeout() 在连接时不会超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29088747/

相关文章:

java - 当我使用http comet时,如何让tomcat发送tcp keepalive数据包

sql-server - SQL Server 在重组索引和更新统计信息期间超时

c# - 我可以手动运行代码契约(Contract)分析吗?

C - 将文件内容写入缓冲区

sockets - NestJs套接字Io工作在不同的端口上,但不能工作在同一个端口上

java - 使用 Java Constructor.newInstance(args) ,为什么会出现 "wrong number of args"错误?

java - 我需要什么才能开始创建类似于《部落冲突》的 Android 游戏?

c# - 限制 Selenium FindElement() 的超时时间

java - OutputStreamWriter 内部缓冲区大小

Java进程仍在运行