服务端代码:
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。

解决方案 »

  1.   

    楼上几位都没理解对!!
    我是说服务端的getRomteAddress和客户端的getLocalAddress指的都是一个地址,应该相同,但实际结果却不同。我又做了几个试验,发现这段程序在WinXP上运行得到的结果是两地址相同,而在win7上运行却得到两地址不相等的结果。
      

  2.   

    从理论上理解我也觉得二个是相同的,实际在XP SP3及RHEL4.2上运行的结果是相同的,可能与操作系统有关系,我这无WINDOWN7的操作系统,无法进行测试
      

  3.   

    楼主。地址相同啊!都是127.0.0.1也就是你本机啊!不同的是:后的端口号 一个是5702,一个是5701。原因楼上说了。一个是接收后重新产生的socket,一个是你原本发送的socket。这2个并不是同一个。如果不理解,多去看看资料咯
      

  4.   

    两个socket不是同一个socket了,难道还会相同吗?
      

  5.   

    socket是不一样,但是服务端取的远程地址和端口应该和客户端取的本地地址和端口相同吧……不然怎么通信的
      

  6.   


    这个意思是不是说,服务端收到的进程和客户端实际的进程并不是同一个?这是WIN7的某种机制么?
      

  7.   

    楼上各种不知所云,很明显楼主服务器进程端口是8888。客户端从5701端口发连接给服务端,服务端显示远程的端口是5702……我也试验了,XP和SUSE上没问题的,相同。WIN7没环境测试……
    怀疑WIN7是不是搞了什么安全机制,做了个代理什么的……
      

  8.   

    很可能是加入了代理机制,你在WINDOW7 上运行程序后执行netstat -an 如果5702与5701之间有连接则可以确定是这个原因了
      

  9.   

    这个应该相等啊,我在xp上是相等的,没有win7的环境,不知道在win7上为什么会这样