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

时间:2014-03-06 21:00:17

标签: java

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

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

问题是,当客户端响应时,似乎会建立两个连接。从我的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) {
        }
    }
}

- EDIT-- 与服务器通信的客户端代码(Message是一个简单的“包装器”类):

System.out.println("Write to server:");
    String name = scanner.nextLine();
    Message message = new Message(name, null);
    oos.writeObject(message);
    oos.flush();

1 个答案:

答案 0 :(得分:1)

如果所有打印都发生两次,则必须有两个连接。之后,第一行再次打印,因为您处于循环中。

NB:

  1. 从不忽略异常:尤其是IOExceptions。
  2. 睡眠完全没有意义。如果没有传入连接,accept()将阻塞。你真的在这里浪费时间。