日期:2014-05-20  浏览次数:20681 次

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


------解决方案--------------------
“比如10个客户端连,服务器端除了一个监听端,还会为这10个连接开端口吧。ServerSocket.accept()返回的对等socket,socket.getLocalPort()还是和ServerSocket绑定的端口是一样的。那返回的socket不可能是同一个吧”
服务端就一个端口,不管多少个客户端连接上来了。
getLocalPort()获得的是本地绑定的端口。你要理解本地的意思。
getPort()这个才是获得客户端的端口号。


“如果有N个客户端连,n不可能无限大的吧,能限制吗?”
连接数不可能无限大的,好像是不同操作系统都有限制连接数的最大数。
你自己也可以写逻辑限制,例如你要限制最大100个连接,定义个变量i,每次有连接+1,断开连接-1。当i==100的时候,不调用accept()方法即可。