日期:2014-05-17  浏览次数:20697 次

C#新人求教-----关于聊天程序
   网上的程序大部分是关于局域网内部的通信。
1.假设我是局域网192.168.1内部的,路由ip是221.235.1.226 
而我对话的对象也是192.168.1内部的,其路由ip是221.235.1.116这该怎么通信?
2.我是客户端 我要发连接申请 这个目标怎么确定
其实是一个问题,想了很久想不通。。。求教各位高手  

------解决方案--------------------
两边都是内网没有办法发起连接。
google "NAT穿透","NAT打洞"。
------解决方案--------------------
需要P2P打洞,已有成熟的P2P框架,可以帮你做这件事,可以参考一下ESFramework。
------解决方案--------------------
中转和打洞都需要在公共网络有一台服务器。对于打洞来说,它需要首先通过服务器来得到通知(对方的外网IP和端口),然后就与对方通讯而在也不使用服务器了。打洞基本上就这点技术含量。当然还需要每一个客户端都可以将端口复用给之前两个远程连接。

给别的机器中转通讯,写这程序仅需要花不到抽半颗烟的时间。假如说你的Super Master服务器记录所有客户端,可以自动查找两个客户端端都能公共访问到的另一个客户端,把它升级为这两个客户端的临时中转服务器,那么其实真的没有必要打洞。

至于说把UDP封装成如TCP般稳定的通讯,那么其实还不如直接使用TCP而不用UDP。