gpt4 book ai didi

成功连接和写入次数后 Java 连接超时

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:17 25 4
gpt4 key购买 nike

我有一些基本的 java 套接字客户端/服务器代码,用于在循环中将多个对象从客户端发送到服务器:

服务器

    final ServerSocket listener = new ServerSocket(8080);
while (true) {
final Socket socket = listener.accept();
try {
final ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
final Object object = ois.readObject();
ois.close();
socket.close();
} catch (Exception e) {
throw new RuntimeException("error", e);
}
}

客户端

public void go() {
try {
while (true) {
sendObject();
}
} catch (Exception e) {
throw new RuntimeException("error", e);
}
}

private void sendObject() throws IOException {
final Socket socket = new Socket("localhost", 8080);
final ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(result);
out.close();
socket.close();
}

在发送了大约 16,000 个对象之前,这一切正常。然后代码最终超时并显示以下内容:

Caused by: java.net.ConnectException: Operation timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at uk.co.imrichardcole.socket.ObjectSocketClientBenchmark.sendObject(ObjectSocketClientBenchmark.java:39)

我假设我因为没有正确清理而筋疲力尽,但尽管尝试了 closeflush 的各种组合,但我似乎无法发现什么是的。

最佳答案

您正在用太多的快速连接填满积压队列。发生这种情况时,Linux 将不会响应进一步传入的连接请求(SYN 数据包)。

您应该尽可能长时间地使用相同的连接,并且使用相同的对象流。

关于成功连接和写入次数后 Java 连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31920515/

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