c# 外网向内网发送UDP数据包问题

panyyer 2017-06-09 04:34:24
如题。场景是这样的,客户端连的是校园网(内网),出外网会有指定的外网ip和随机分配的端口。服务器端是阿里云主机

现在服务器端已经成功接收到客户端发送的UDP数据包了,并且能获取对应的客户端外网IP和端口,但是每隔一段时间获取一次之后发现端口是动态改变的,而服务器端使用从客户端获取到的IP和端口回发UDP数据包,客户端也接收不到。

请问是什么问题呢?
...全文
241 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
当你将来开发一个软件的时候,这个软件可能运行在城域网、小区网络、大楼网络、甚至楼层路由器内部,许多层 NAT 的内部,所以这是一个很基本的很常见的设计问题。你将来工作了之后,如果如果遇到不了解这个常识的软件开发者来进行网络软件的安装和调试,就会发现差别了。
  • 打赏
  • 举报
回复
学习网络的时候,“内网、外网”的机制这是一个常识。你要温习一下 NAT 知识。
  • 打赏
  • 举报
回复
NAT 通讯本来就是这样的,你这里是把常识当作问题来问了。 当内网(比如说)192.168.1.100:3399 访问服务器的时候,可能对外是 122.133.10.100:12345,这时候服务器就向后者返回数据,就能送达 192.168.1.100:3399 ,因为路由器/交换机保存有内部的端口映射表格信息。 但是对于 udp 来说,路由器/交换机一般都是只有很低的优先级(这是因为 udp 是流氓通讯方式,它故意抢占网络造成拥塞),通常只维持一个很短的映射时间,超过一段时间没有返回信息就会切断这种映射。服务器接收到 udp 消息必须马上回写信息。连接会被路由器/交换机自动切断,所以 udp 消息经常丢失,udp是不可靠的。 而对于非常优雅、主动优化网络拥塞状态的 TCP 则会保持长连接映射,直到连接由一方主动中断为止。tcp 方式才可以保证可靠地通讯。
xuzuning 2017-06-10
  • 打赏
  • 举报
回复
不是问题! 外网不能访问内网,这是常识。内外有别嘛

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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