java udp 打洞_JAVA udp打洞出现的问题~

忙了两天的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();

}

}

展开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值