Code Bye

C# 两台电脑如何通过外网通信

因为初学C#,学到网络通信这就混乱了,还请大神赐教!
就是举个例子:比如,我的电脑 外网IP 是 116.246.2.227 ,我的 内网 IP 是 192.168.1.6 ,端口是:3200我想发送消息给  外网IP 是  220.120.123.42 内网 IP 是 192.168.0.2  端口为 3100 的电脑 ,如何顺利通信,这个通信的流程是怎样的,用C# 语言又该怎么变成实现?
可能我的例子有不恰当的地方,但是真心求赐教?

1分
Socket、wcf、webservice都可以。
引用 1 楼 guwei4037 的回复:

Socket、wcf、webservice都可以。

我想弄客户端的,可以详细点吗?

5分
简单来说,你的两个电脑需要访问一台位于外网的服务器进行登录。它们登录时同时提交自己的内网地址。

然后内网的机器可以相互间首先使用对方的内网IP进行访问,使用服务器分配的授权号进行相互核对。如果可以对上授权号,那么就可以直接通讯;如果对不上,那么通过外网服务器转一下消息进行通讯。

5分
如果是刚开始设计通讯方面程序,那么你使用服务器转发这一种形式也就够了。假设客户端跟服务器是长连接双工通讯的,那么你的通讯信令就应该可以区分是客户端到服务器还是从服务器到客户端的消息(例如使用id号>0和<0作为区分),服务器可以随时向客户端发送消息。当一个客户端发送消息给服务器,服务器判断这只是一个“路由消息”,于是它找到对方所在的Client通道,然后发送出去就行了,服务器处理这种动作不需要耗费基本毫秒的时间,也很快。
4分
给楼主几个链接,看了 就很清晰明了了
http://www.cnblogs.com/JimmyZhang/archive/2008/09/07/1286300.html
1分
你需要使用Socket打开一个链接的通道进行传输
1分
要在路由做端口映射
各位大神,还不够详细啊。。。
1分
随便去下载类似聊天软件的例子自己研究就行了
10分
两个都在内网的主机需要通讯:

1.先打洞
2.如果做测试,可以在接收方的nat中做一个映射
  比如把接收方所在内网路由器上的一个公网端口 映射到 内网中的接收主机
  
 接收方公网IP  222.30.64.111  端口55555  设置映射  内网IP 192.168.1.100 内网端口 55556

那么你所有发送给 222.30.64.111:55555 的数据包  全部会转给  内网中 192.168.1.100:55556
至于发送方  不需要做处理  这个跟实际网络结构有关  不一定每次设置都会有效的
  

6分
如果只是自己测试  建议使用第二种  第一种没有成熟的设计的话  根本不稳定   很容易失效
4分
NAT打洞,适用于两端都是在内网的情况。因为第一次发送通讯请求,目标必须在公网上,所以通常来说,两端都在内网谁也无法发起连接,更不要说通讯了。

NAT打洞就是依赖一台服务器作为中转,让一个客户端和这个服务器通讯,另一个客户端通过实现和这个服务器建立的连接获得前一个客户端的端口、IP,然后服务器把控制权交给客户端,使得两个内网的客户端不再需要服务器中转就能直接通讯。

1分
光有IP和端口还是不行的,你需要一种传输层的协议。通常来说有TCP和UDP两种协议。对于TCP协议,需要三次握手的过程,你结合教材自己先了解下。再在网上找例子程序看。
各位大神,我把两台电脑,其中一台通过路由器映射了,也就成为了所为的服务器了,另一台也就是处在内网的,也就是我们平时一般人的电脑,也就是客户端了,那么客户端是可以向服务器发送消息,而且我通过编程发现,客户发来的消息的IP就是它外网的IP,但是端口每次都在改变,我服务器回发给那个IP和端口,结果客户端没收到消息,怎么回事?
我服务器该如何回复消息,如何准确的发给这个处在外网的机器,还请详细点。。。
1分
Socket
还望楼主求解?
请问问题解决了没? 求源代码。谢谢!
chenyuncpp@126.com
嗨,说那么多,又是打洞什么的。LZ已经说了做了端口映射了。
但就没人说到点上,其实有些问题,不用说,给一段实例代码,哪怕是不成熟的几句代码
都比说那么多更形象

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C# 两台电脑如何通过外网通信