本帖最后由 igoqhb 于 2014-05-24 14:39:24 编辑

解决方案 »

  1.   


    程序偶尔会出现同时接收到多个数据包的情况,不过大多情况下是来自同一个客户端,所以就是同一个IP和端口。如果同时接受到了多个客户端的数据包,SocketAddress client_addr = cc.receive(buffer);   是不是只能记录一个IP和端口呢?不知道这样的情况会不会出现
      

  2.   


    程序偶尔会出现同时接收到多个数据包的情况,不过大多情况下是来自同一个客户端,所以就是同一个IP和端口。如果同时接受到了多个客户端的数据包,SocketAddress client_addr = cc.receive(buffer);   是不是只能记录一个IP和端口呢?不知道这样的情况会不会出现
    每次receive只会接收一个DatagramPacket,也就是来自同一个客户端的数据,如果你的buffer太小,那么多出的数据会直接舍弃。
      

  3.   

    首先,一个UDP报文里面放置的,只有一个主机中,一个进程内发出的一个消息。
    其次,我们可以通过UDP报文中的IP地址和端口号组合(也就是Socket)来区别消息的来源(不同的客户端程序)。
    第三,接收消息的方式,要注意同步阻塞式的接收还是异步非阻塞式的接收,两者的逻辑会有些区别。