我是小白 望指点

来源:5-5 实现聊天室服务端:ChatServer

慕容9054781

2019-12-25

客户端和服务器产生连接,端口号不都是8888吗,那map里存储的key怎么还会是客户端的端口号啊

写回答

1回答

Stannum

2019-12-28

同学好~我们建立一个连接,在服务器端和客户端要分别打开一个端口,以便双方进行信息交换。

在ChatServer中,调用accept()会返回一个Socket对象。在ChatClient中,我们也会创建一个Socket对象。这两个对象表达的是同一个连接,只不过第一个Socket是供服务器端进程进行操作的对象,而第二个是供客户端进行操作的对象。

你可以试着调用Socket的两个函数:getLocalPort()和getPort()。第一个函数返回的是Socket在本地绑定的端口,而第二个函数返回的是Socket在远端绑定的端口。

对于服务器端accept()函数返回的Socket对象,它的本地绑定端口就是服务器的监听端口8888,而它的远端端口,则是一个由系统分配的可用端口(因为在我们的例子里没有自己指定客户端端口)。而对于ChatClient里面创建的Socket对象来说,这两个端口正好相反,本地端口是系统分配的端口,而远端端口是8888。

我们在map中储存的,正是accept()函数返回的Socket对象的远端端口。

3
1
1jushi
老师好,由于不同client访问同一个server,可能出现不同client端口相同的问题,所以是不是还得加上ip比较好?
2020-03-15
共1条回复

系统学习Java网络编程 深度理解BIO/NIO/AIO

对比式学习助你真正理解BIO/NIO/AIO三大网络编程模型。

880 学习 · 148 问题

查看课程