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

UDP里的DatagramPacket 对象的疑问
在服务器端一般都是死循环 来监听一个端口。也是就
Java code

while (isRunning) {   
  datagramSocket.receive(packet);   
                       
} 

receive(packet) 这个方法是阻塞式的。我的疑问就是,当我接受到客户端发送过来的数据,并放在packet里后,然后我把这个DatagramPacket 对象 拿去处理的时候, 同时又有一个数据包过来,会不会第二次来的数据把第一次来的数据给覆盖了,从而造成 当我在使用第一次的DatagramPacket对象的时候,造成数据错误呢!

------解决方案--------------------
如果不启动线程处理,那么只有当下一次receive时才会JVM才会将第二个数据包的数据放入packet中。所以不存在覆盖问题。但是如果你启动线程对packet处理,主线程还调用receive则会覆盖