Java 套接字:同一台计算机上的同一端口上的多个客户端线程?

2022-09-02 10:42:15

我是Java中套接字编程的新手,并试图了解下面的代码是否不是一件错误的事情。我的问题是:

我是否可以在每个线程上有多个客户端尝试连接到同一程序中的服务器实例,并期望服务器在客户端之间隔离地读取和写入数据”

public class Client extends Thread
{
    ...
    void run()
    {
        Socket socket = new Socket("localhost", 1234);
        doIO(socket);  
    }
}

public class Server extends Thread
{
    ...
    void run()
    {
        // serverSocket on "localhost", 1234
        Socket clientSock = serverSocket.accept();
        executor.execute(new ClientWorker(clientSock));
    }
}

现在,我可以在不同的线程上有多个客户端实例尝试在当前计算机的同一端口上进行连接吗?

例如

   Server s = new Server("localhost", 1234);
   s.start();
   Client[] c = new Client[10];
   for (int i = 0; i < c.length; ++i)
   {
        c.start();
   }

答案 1

是的,但是只有一个客户端能够以写入的方式连接每个线程执行。

你可以把你的服务器run()放在一个临时真正的循环中,让多个客户端连接。根据执行器的不同,它们将串联或并行执行。

   public class Server extends Thread  
   {  
       ...  
       void run()  
       {  
           while(true){
              // serverSocket on "localhost", 1234  
              Socket clientSock = serverSocket.accept();  
              executor.execute(new ClientWorker(clientSock));  
           }
       }  
   } 

答案 2

只要只有一个对象尝试绑定端口以进行侦听,则多个客户端连接没有问题。


推荐