JAVA UDP内网打洞遇到的坑
今天做聊天通讯,使用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
版权声明:本文为博主原创文章,转载请附上博文链接!