特别奇怪,至少我这么认为。
一个server,一个client。如果在一台机器上,能够正确连接和收发数据。如果把server放到公网上去,发现能连接,但收到的第一个数据包前面就多了两个值0的Byte。server驻留的机器上不管开不开防火墙都这样子。请问是怎么回事儿?

解决方案 »

  1.   

    找到问题了。处在server接受数据的代码:byte[] temp=new byte[4];
    connection.getIn().read(temp,0,4);发现只读了两个字节到temp里面。根据JDK的文档,这时候是“最多读4个字节”,但不清楚为什么读了俩就撤了,因为后续的数据确实被下面的代码读到了。可能网络延迟后,第一次读的时候只到达了两个字节吧。改成下面的就好了:for(int i=0;i<4;i++)
        temp[i]=connection.getIn().read();也许直接用装饰器类会更好些吧。