0

我正在尝试使用套接字和线程将多个客户端连接到服务器。也就是说,每次客户端连接到服务器中的端口时,服务器程序都会创建一个新线程并在它自己的线程上处理连接。目前,我遇到了两次连接同一个客户端的问题。有谁知道如何防止这个问题?这是我的代码。

这是我的服务器连接代码:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerConnect {
    public static void main(String[] args) throws IOException,
            InterruptedException {
        ServerSocket serverSocket = null;
        // boolean listening = true;

        try {
            serverSocket = new ServerSocket(20001);
        } catch (IOException e) {
            System.err.println(e.getMessage());

            System.exit(-1);
        }
        int players = 6;
        ServerHello[] cArray = new ServerHello[players];
        Thread[] threadPool = new Thread[players];

        for (int i = 0; i < players; i++) {
            System.out.println("Connection number " + (i + 1)
                    + " waiting for client on port 20001.");
            Socket clientServer = serverSocket.accept();
            cArray[i] = new ServerHello(clientServer);
            threadPool[i] = new Thread(cArray[i]);
            threadPool[i].start();

        }

        for (int i = 0; i < players; i++)
            threadPool[i].join();



           //My Code


            for (int i = 0; i < players; i++) {
            cArray[i].closeConnect();
        }
        serverSocket.close();

我已经测试过客户端连接并且知道它可以工作。但是,出于某种原因,服务器一直以两个为一组连接同一个客户端。

4

1 回答 1

0

防止它发生的唯一方法是每个客户端都应该有一个唯一的 ID。然后服务器将接受来自客户端的连接,客户端将其 id 发送到服务器,服务器将检查相同的 id 是否已连接,然后创建一个新线程来处理它,否则您可以删除客户端连接

于 2013-07-04T14:05:46.337 回答