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()方法即可。