谁知道当我使用ServerSocket类的accept方法时如何选择端口?是否可以为方法可以选择的端口定义范围?我可以按顺序逐个接收端口吗?
ServerSocket sSocket = new ServerSocket(5050);
Socket socket = sSocket.accept();
解决方法:
该图表不正确(并列在O’Reilly网站上的unconfirmed errata中).
客户端随机选择其端口(您不需要在Java中执行任何特殊操作)并在您指定的任何端口上连接到服务器.使用netstat命令行工具,您可以看到这一点.
首先,只是没有客户端的侦听服务器套接字:
simon@lucifer:~$netstat -n -a
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
...
tcp46 0 0 *.5050 *.* LISTEN
...
(还有很多其他条目,我刚刚删除了不相关的条目)
现在有一个客户端从localhost(127.0.0.1)连接:
simon@lucifer:~$netstat -n -a
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
...
tcp4 0 0 127.0.0.1.64895 127.0.0.1.5050 ESTABLISHED
tcp4 0 0 127.0.0.1.5050 127.0.0.1.64895 ESTABLISHED
tcp46 0 0 *.5050 *.* LISTEN
...
由于客户端从同一台机器连接,我们看到两个已建立的连接 – 一个从客户端到服务器(1),另一个从服务器到客户端(2).它们具有相反的本地和外部地址(因为它们彼此交谈)并且您可以看到服务器仍在使用端口5050,而原始服务器套接字(3)继续在同一端口上侦听.
(此输出来自Mac,但Windows / Linux也有netstat给出类似的输出)
标签:java
来源: https://codeday.me/bug/20191004/1853649.html