wince apple在局域网中国发送udp丢包率几乎为0。性能相当出色。而在android上丢包率在10%左右。真是头痛。代码如下:public UdpClientSocket() {

this.host = "255.255.255.255";//改成目标IP,而不用广播效果也不明显。

try {
ds = new DatagramSocket();


} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// this.host=host;
} public void send(  byte[] bytes)  {

DatagramPacket dp;
try {ds.setSendBufferSize(1);//这个加与不加效果不明显。
dp = new DatagramPacket(bytes, bytes.length,
InetAddress.getByName(this.host), 1024);
ds.send(dp);

} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



}

是哪里做的不好,它要丢这么多包,我已在多个android上测试过,都有相同的问题。

解决方案 »

  1.   

    UDP本身就不保证传输数据的完整性,就一次握手。楼主可以试试三次握手的TCP。
      

  2.   

    UDP确实不是很可靠,他是不保证通信的成功性的,就是传输速度比TCP快一些。你为什么不用TCP呢。
      

  3.   

    tcp的话就很不方便了,要知道对方的IP,要断线重连。就会有很多问题了。
    如果按一下按钮
    TCP 连接,发送buf,断开的话实时性不是很好.
    如果长连接,编写也是个麻烦事。
      

  4.   

    还是要看网络的。如果网络比较差,TCP也会连接不上的。网络好的话udp还可以,我加了确认机制后在网络比较好的地方,情况还是比较乐观的。
      

  5.   

    楼主,我也在做安卓局域网测试 ,广播的话,安卓手机丢包确实很严重,总是丢5%,而且跟手机硬件水平有关,好手机,性能强的手机丢包少,差点的手机,丢包就多,你现在那个udp丢包问题是怎么解决的呢?后来?