JAVA UDP内网打洞遇到的坑

super_2019 2018-11-09 05:55:03
今天做聊天通讯,使用UDP实现,基本流程为:

1. 客户端发包请求远程服务器8080端口

2. 服务器接受到客户端的探测包,成功获取客户端外网IP和端口号返回客户端并保存当前客户端的IP地址和端口;

客户端DatagramSocket线程中侦听外网的包,注意:客户端使用的DatagramSocket端口号是系统随机分配的,

因此向服务器发包和接受外网包都是同一个。

3. 现在都实现正常通讯,服务器端可以向客户端发包了,好开心~~~

4.问题来了:5分钟后我在服务器端向之前的那个IP和端口号发包,奇怪的是否客户端明明在线程中侦听包的呀,

但还是收不到,没反应,4分钟以内没问题,超过4分钟自然收不到。好的,一步一步找问题,设置DatagramSocket

超时方法,设置之后测试,依然如此!检查客户端UDP端口是否打开,打开cmd一看,吓一跳,居然开着的呀!问题

是啥呢,是不是5分钟内不发包自然就收不到了?这个问题看来有点高深,着实有点打脑袋,有朋友知道的话麻烦多多指教。
---------------------
作者:叫我老四季
来源:CSDN
原文:https://blog.csdn.net/chencai123654/article/details/83107907
版权声明:本文为博主原创文章,转载请附上博文链接!
...全文
185 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklwan 2018-11-13
  • 打赏
  • 举报
回复
长连接需要心跳监听连接状态,若收不到心跳需要断线重连。
smwhotjay 2018-11-12
  • 打赏
  • 举报
回复
p2p打洞 要经常维持消息。不然洞久了不用就自动关闭了。

80,480

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧