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

java socket编程 - 服务端和客户端两边端口号居然不相等?!
服务端代码:
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();
System.out.println(socket.getRemoteSocketAddress());

客户端代码:
socket = new Socket("192.168.1.100",8888);
System.out.println(socket.getLocalSocketAddress());


服务端输出:/127.0.0.1:5702
客户端输出:/127.0.0.1:5701


问题:为什么一个端口号是5702,一个端口号是5701,怎么不相等啊???
并且,每次测试的结果都是这两个端口号相差1,为什么???应该相等才对啊!!

我的环境:操作系统Windows 7, JDK 1.6。

------解决方案--------------------
从理论上理解我也觉得二个是相同的,实际在XP SP3及RHEL4.2上运行的结果是相同的,可能与操作系统有关系,我这无WINDOWN7的操作系统,无法进行测试
------解决方案--------------------
楼上各种不知所云,很明显楼主服务器进程端口是8888。客户端从5701端口发连接给服务端,服务端显示远程的端口是5702……

我也试验了,XP和SUSE上没问题的,相同。WIN7没环境测试……
怀疑WIN7是不是搞了什么安全机制,做了个代理什么的……
------解决方案--------------------
很可能是加入了代理机制,你在WINDOW7 上运行程序后执行netstat -an 如果5702与5701之间有连接则可以确定是这个原因了