2013-07-04 91 views
0

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

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

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(); 

我已经测试的客户端连接,并知道它的工作原理。由于某些原因,服务器一直连接两个相同的客户端。

+0

很高兴看到println调用的实际输出,还有更多此类调用,以及您在自己的调试期间发现的内容,以及线程代码以及缺少的“ServerHello”类。 –

回答

0

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