忙了两天的androidudp穿洞(JAVA),任然存在一些奇怪的现象,为什么模拟器之间的穿洞能够成功,而PC服务器向模拟器发送的信息却在延时之后不能够收到,明明抓包显示含有需要的udp到达...
忙了两天的android udp穿洞(JAVA),任然存在一些奇怪的现象,
为什么模拟器之间的穿洞能够成功,而PC服务器向模拟器发送的信息却在延时之后不能够收到,明明抓包显示含有需要的udp到达,可是为什么不能接收到呢?(模拟器之间一旦建立连接,就能够正常的相互发送信息,而问题就出在能否正常建立连接之上,每当第二个模拟器连接服务器时,服务器发送给模拟器1的有关新进入的连接信息有很大几率收不到,极小的几率收到,收到后就成功建立了连接)
而模拟器这边的心跳包仍然维持,并无间断,因此nat租用的端口应该存在才对。
求助~~~
再详细描述一次:
有两个android模拟器a,b,一个server,首先a连接server,这时server会返回信息,这个信息是每次都能够收到的,说明nat租用成功才对。
这时候b连接server,b也连接成功收到返回信息,
但是这时应该server向a 发送b的信息了,可是a 却不能收到,
并且有非常小的几率,也就说说有时候a能够收到,有时候却不能够
根据抓包显示:
1,数据包是到达了本地PC,却不知何故被屏蔽或者没有接收
2,a 向server间隔5秒发送的心跳包始终维持(5秒应该已经很短了,据说QQ2003是一分钟)
3,结合上面两种的udp包显示,目标和源ip地址、端口号均没发生变化。
能够确定的是,:
1,a在b连接时应该收到server发送的信息,却没有任何信息到达,而有时候(几率极小)该信息能够收到
2,a 确实处于监听状态,并且端口和ip地址均无变化
3,nat租用时间应该在失效范围以内(这里做了一个测试,就是在初始a连接server时,a 发送消息后,server延迟5秒再返回相关信息,a确定能够收到)
4,测试网络是局域网,两台电脑相互传输,如果说是掉包了, 那是不可能的,因为两端转包均显示有相应的数据包送出或者到达
这里服务端或者客户端发送和接受都是使用的同一个udp套接字。
求助……………………………………………………………………解决了加分!
public void onStart(Intent intent,int startId){
super.onStart(intent, startId);
System.out.println("service开始运行");
loopSendThread.start(); //心跳包线程
timeOutThread.start(); //超时计算线程
timeOutDealThread.start(); //超时处理线程
System.out.println("Service: 所有服务开启!");
//开始接收数据
try{
do{
buf = new byte[1024];
packet = new DatagramPacket(buf,buf.length);//接收包
System.out.println("Service: 正在等待数据。。。");
socket.receive(packet);//等待返回数据到达
System.out.println("MainService:收到数据!");
receiveThread = new ReceiveThread(packet);//启动自线程进行处理
receiveThread.start();
}while(Running);
} catch (Exception e){
e.printStackTrace();
}
}
展开