我是小白 望指点
来源:5-5 实现聊天室服务端:ChatServer

慕容9054781
2019-12-25
客户端和服务器产生连接,端口号不都是8888吗,那map里存储的key怎么还会是客户端的端口号啊
写回答
1回答
-
同学好~我们建立一个连接,在服务器端和客户端要分别打开一个端口,以便双方进行信息交换。
在ChatServer中,调用accept()会返回一个Socket对象。在ChatClient中,我们也会创建一个Socket对象。这两个对象表达的是同一个连接,只不过第一个Socket是供服务器端进程进行操作的对象,而第二个是供客户端进行操作的对象。
你可以试着调用Socket的两个函数:getLocalPort()和getPort()。第一个函数返回的是Socket在本地绑定的端口,而第二个函数返回的是Socket在远端绑定的端口。
对于服务器端accept()函数返回的Socket对象,它的本地绑定端口就是服务器的监听端口8888,而它的远端端口,则是一个由系统分配的可用端口(因为在我们的例子里没有自己指定客户端端口)。而对于ChatClient里面创建的Socket对象来说,这两个端口正好相反,本地端口是系统分配的端口,而远端端口是8888。
我们在map中储存的,正是accept()函数返回的Socket对象的远端端口。
312020-03-15