gpt4 book ai didi

java - Java 客户端连接到本地主机时出现无法解释的 SocketException

转载 作者:行者123 更新时间:2023-11-30 05:11:32 27 4
gpt4 key购买 nike

我有一个在 iSeries 上运行的 Java 程序,它连接到同一主机上的服务器进程。下面是 Java 客户端代码的编辑版本:

while (true) {         
try {
socket = new Socket(myHost, myPort);
} catch (UnknownHostException ex) {
// Quit
} catch (ConnectException ex) {
// Wait for a while and retry
continue;
} catch (IOException ex) {
// Quit
}
break;
}

// Do stuff with socket...
有时,在调用 Socket() 构造函数时,我会收到一个 SocketException,它落入退出应用程序的 IOException 处理程序中(这可能是一个稍微苛刻的 react ,但在我更了解问题之前我不想更改它)完全)。这是堆栈跟踪:

java.net.SocketException: A connection with a remote socket was reset by that  
at java.lang.Throwable.<init>(Throwable.java:195)
at java.lang.Exception.<init>(Exception.java:41)
at java.io.IOException.<init>(IOException.java:40)
at java.net.SocketException.<init>(SocketException.java:29)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
at java.net.Socket.connect(Socket.java:488)
at java.net.Socket.connect(Socket.java:438)
at java.net.Socket.<init>(Socket.java:148)
at com.foo.AccessObject.<init>(AccessObject.java:36)

我知道,如果我正在从套接字读取数据,而另一个对等方关闭了它,我将收到 SocketException。我还了解到,如果连接失败,我将收到 ConnectionException。我不明白的是如何在创建 Socket 时获得 SocketException。我认为我可以消除狡猾的网络设备,因为连接将连接到本地主机。

我可以通过捕获 SocketException 而不是 ConnectionException 来解决这个问题,但我不想掩盖这个问题,至少在我进一步了解它之前是这样。有谁知道可能导致错误的原因吗?

最佳答案

可能的原因可能是您的系统(偶尔)耗尽了 Socket() 创建的端口。使用连接池可能会有所帮助。如果这在您的情况下是可行的选择,这将有助于避免每次都创建新的套接字。

对于linux,可以通过命令列出打开的套接字数量,

netstat -n.

可以通过命令检查打开文件数量的限制(linux将套接字视为文件),

ulimit

关于java - Java 客户端连接到本地主机时出现无法解释的 SocketException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3212155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com