Java Socket Server MultiUser问题;我该如何处理多个套接字

时间:2015-07-06 06:04:34

标签: java sockets serversocket

我使用线程和列表从我的Java套接字服务器处理多个客户端。假设套接字服务器是聊天服务器。

//ServerSocket
ServerSocket servSock = new ServerSocket(port_num);
while(true){
    Socket sock = servSock.accept();
    userList.add(sock);    //List<Socket> userList.
    Thread t = new Thread(new SocketListener(sock, userList));
    t.Start();
}

//Socket Listener Class
public void run(){
     ...

     //sending part for broadcasting message 
     for(Socket sock : userList){
           if(sock!=userSock){
                     sock.write();.....
           }
     }
    ...
}
...

如果连接的客户端很少,这种方法似乎没有问题。这个问题是...... (1)我必须接近&#39; userList&#39;每次我发送东西给另一个客户。当然,我使用列表中的synchronized关键字来同步列表,但我觉得它仍然是一个开销。

(2)如果套接字断开连接或变为空,则会导致错误或崩溃。它可以通过发送循环中的try-catch短语来处理,但我不认为这是一种聪明的方法。

我的问题是,是否有更好的方法或模式来处理这种编码?

0 个答案:

没有答案