java - 为什么 Java ServerSocket 接受方法会为来自客户端的一个连接请求返回两次套接字?

标签 java connect serversocket

关闭。这个问题需要details or clarity .它目前不接受答案。












想改进这个问题?通过 editing this post 添加详细信息并澄清问题.

6年前关闭。




Improve this question




以下是服务器程序代码的一部分
ServerSocket serverSocket = new ServerSocket(port);...cameraSocket = serverSocket.accept(); // problematic
下面是想要连接到上述服务器的相机程序的一部分
sock2server.connect((new InetSocketAddress("127.0.0.1", 6066)), 1000);
问题是:上面有问题的accept语句返回两次for
一个连接请求。返回的间隔约为 7 毫秒。

有人可以解释这种现象吗?

这是客户端代码(我稍微改了一下,是一个完整的方法)
仅当客户端首先运行(在服务器运行之前)时才会出现问题

private Socket connectSocket() {
    final short ID_SEND_PERIOD = 100; // irrelevant line maybe

    try {
        appendLine(cameraGUI.getMsgArea(), "calling at: " + currentTimeMillis());
        Socket managerSocket = new Socket();
        managerSocket.connect((new InetSocketAddress(serverName, port)), CAMERA_PERIOD);
        managerSocket.setSoTimeout(CAMERA_PERIOD);
        setManagerOutStream(managerSocket.getOutputStream()); // irrelevant line maybe
        setManagerInStream(managerSocket.getInputStream()); // irrelevant line maybe
        toleranceLevel = MAX_TOLERANCE; // irrelevant line maybe
        sendID_forSure = new Timer(); // irrelevant line maybe
        sendID_forSure.schedule(new ID_Sender( // irrelevant line maybe
                cameraGUI, getManagerOutStream(), cameraID), // irrelevant line maybe
                0, ID_SEND_PERIOD); // irrelevant line maybe
        return managerSocket;
    } catch (SocketTimeoutException e) {
        return null;
    } catch (IOException e) {        
        logParkingExceptionStatus(Level.INFO, e, "IO exception", cameraGUI.getCriticalInfoTextField());
        disconnectSocket(e, "IO exception"); 
        return null;
    }    
}

我有些如何找到解决方案。但是,我不完全理解为什么。
也就是说,我从上面的代码中注释掉了 2 行
// Socket managerSocket = new Socket();
// managerSocket.connect((new InetSocketAddress(serverName, port)), CAMERA_PERIOD);

并用以下单行替换这些行。
Socket managerSocket = new Socket(serverName, port);

更改后,即使客户端先运行,accept 也不会执行两次。
如果有人能给出原因,那可能有助于我的理解。谢谢。

最佳答案

您所看到的唯一合理的解释是您的相机应用程序实际上连接到服务器两次。

关于java - 为什么 Java ServerSocket 接受方法会为来自客户端的一个连接请求返回两次套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30409016/

相关文章:

java - SSL 套接字获取流量类在 java 中不匹配

java - TCP android 服务器没有收到来自 Java TCP 客户端的第一条消息

Java Select 语句结果问题

c# - 如何将 datetime 变量从 C# 代码传递到 java webservice?

java - 如何在java中的char上使用.set()或.setvalue()

html - 将 Shell 脚本变量输出为 HTML

hadoop - hadoop 与 put/copyFromLocal 连接错误

node.js - 连接中的访问控制源(node.js)

java - 更新参数子项后更改值(不生成随机 token )Firebase Android Studio

c++ - 绑定(bind) : Socket operation on non-socket