C# UDP协议接收外网数据

LovingAlison 2011-12-10 05:08:18
大家好
我写了一个聊天工具 局域网内运行正常
现在把服务器部署到外网后
客户端是内网(局域网)内一个一台机器
客户端给服务器发送消息 服务器可以接收到
但是服务器返回消息时客户端无法接收
使用UDP协议
查了下资料说是消息到了网关后不知道具体发给那台机器了
需要NAT

请问具体应该怎么做 代码应该做如何修改 谢谢
...全文
268 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
呵呵,世界上有几亿人上网,谁给这几亿人“做端口映射”?到哪里“做端口映射”?

不过“打洞”其实也非常困难,而且非常不可靠。你从互联网上抄来的“打洞”代码,十个里几乎有十个都根本不可靠。

所以最好还是先搞好TCP通讯,这不需要要打洞就可以把服务器端的消息返回给客户端。
快溜 2011-12-11
  • 打赏
  • 举报
回复
要做端口映射,搜下nat技术资料吧http://www.cnblogs.com/GX/articles/352614.html
  • 打赏
  • 举报
回复
呵呵,看了一分钟,不太仔细。不过看看这个思维逻辑,其实非常成问题(也许代码言不由衷吧,但至少文字写的是不对的!)

原本这样写的:

/// 这是主要的函数:发送一个消息给某个用户(C)
/// 流程:直接向某个用户的外网 IP 发送消息,如果此前没有联系过
/// 那么此消息将无法发送,发送端等待超时。
/// 超时后,发送端将发送一个请求信息到服务端,要求服务端发送
/// 给客户 C 一个请求,请求 C 给本机发送打洞消息
/// *以上流程将重复 MAXRETRY

可是怎么可能有“某个用户的外网 IP”概念?假设另外1000个人都在一个NAT路由器后边,那么它们的所谓“外网IP”是一样的,而且端口经常变换。我怎么预先规定某个人的什么“外网IP”?

所以有些说法也许作为一种“技术”说明是可以的,但是实际应用时你按照它的逻辑去设计你的程序,结果会发现不靠谱。因为很多问题不是出在会不会几条编程语句上,而是逻辑流程的设计根本就是错的。
ycg_893 2011-12-11
  • 打赏
  • 举报
回复
这是一个打洞
http://files.cnblogs.com/yjmyzz/CSharp_P2P_Nat.pdf
ycg_893 2011-12-10
  • 打赏
  • 举报
回复
据说要打洞,但没有搞过.

110,476

社区成员

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

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

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