刚接触网络编程。我想问:
 1,比如10个客户端连,服务器端除了一个监听端,还会为这10个连接开端口吧。ServerSocket.accept()返回的对等socket,socket.getLocalPort()还是和ServerSocket绑定的端口是一样的。那返回的socket不可能是同一个吧。
 2,如果有N个客户端连,n不可能无限大的吧,能限制吗?
 3,多线程问题 while(true){
 Socket  socket =  serversocket.accept();
 //这里把socket交给线程池处理
}如果socket在线程A里执行时,服务器又监听到另一个连接,这个也是引用的socket,那这样岂不是有同步问题?

解决方案 »

  1.   

    “比如10个客户端连,服务器端除了一个监听端,还会为这10个连接开端口吧。ServerSocket.accept()返回的对等socket,socket.getLocalPort()还是和ServerSocket绑定的端口是一样的。那返回的socket不可能是同一个吧”
    服务端就一个端口,不管多少个客户端连接上来了。
    getLocalPort()获得的是本地绑定的端口。你要理解本地的意思。
    getPort()这个才是获得客户端的端口号。
    “如果有N个客户端连,n不可能无限大的吧,能限制吗?”
    连接数不可能无限大的,好像是不同操作系统都有限制连接数的最大数。
    你自己也可以写逻辑限制,例如你要限制最大100个连接,定义个变量i,每次有连接+1,断开连接-1。当i==100的时候,不调用accept()方法即可。
      

  2.   

    你说的TCP连接数受操作系统影响是指一台电脑去连N个服务器,此时是有限制的,但是作为服务器端接收,貌似没有限制(也就占内存吧)。而且这里要考虑的主要是处理线程池大小和服务器的处理能力,有多少客户端并不在意。不知道我说的对不对。