Java 套接字编程。程序创建2个连接,而不是仅创建1个连接

Java 套接字编程。程序创建2个连接,而不是仅创建1个连接,java,Java,我正在构建一个客户机/服务器应用程序,用于一些套接字编程练习 下面是我的服务器类的构造+运行方法。服务器等待客户机的响应,在本例中,这只是一个字符串 问题是,当客户端响应时,它似乎建立了两个连接。从我的print语句中,我可以看到run方法中的所有代码都运行了两次,然后第一行再次运行 为什么要使用dateServer.accept();是否只接受一个客户端请求的连接 public Server() throws Exception { dateServer = new ServerSoc

我正在构建一个客户机/服务器应用程序,用于一些套接字编程练习

下面是我的服务器类的构造+运行方法。服务器等待客户机的响应,在本例中,这只是一个字符串

问题是,当客户端响应时,它似乎建立了两个连接。从我的print语句中,我可以看到run方法中的所有代码都运行了两次,然后第一行再次运行

为什么要使用dateServer.accept();是否只接受一个客户端请求的连接

public Server() throws Exception {
    dateServer = new ServerSocket(3001);
    System.out.println("Server lytter på port 3000.");
    this.start();
}


 public void run() {
    while (true) {
        try {
            System.out.println("waiting for client to request");
            Socket client = dateServer.accept();
            System.out.println("connection established");
            Connect c = new Connect(client);
            clients.add(c);
            this.sleep(5000);
        } catch (Exception e) {
        }
    }
}
--编辑-- 与服务器对话的客户端代码(消息是一个简单的“包装器”类):


如果所有的打印都发生两次,那么一定有两个连接。第一行在这之后再次打印,因为您处于循环中

注意:

  • 永远不要忽略异常:尤其是IOExceptions
  • 睡眠是完全没有意义的。accept()将在没有传入连接时阻塞。您在这里简直是在浪费时间

  • 向我们展示尝试建立连接的客户端代码。它运行两次是出于某种原因吗?我从客户端添加了有趣的代码,它是一个客户端尝试建立一个连接如果所有打印都打印两次,则有两个连接。没有两种方法。睡眠只是试图找出错误的原因r、 它应该被删除了是的。有什么问题的建议吗?服务器没有问题。客户端连接了两次,或者有另一个客户端。@Anders将E.printStackTrace()放在你的exception子句中,看看它是否抛出了任何东西没有区别:/噢,我想我明天可以问我的老师。谢谢
    System.out.println("Write to server:");
        String name = scanner.nextLine();
        Message message = new Message(name, null);
        oos.writeObject(message);
        oos.flush();