局域网内的PC如何实现互联网间SOCKET通信

WWWFIND 2009-12-21 03:16:35
不同局域网内的两台PC,分别通过路由器防火墙连接到INTERNET,如何实现这两台PC间的TCP或者UDP通信?
而不必手动设置路由器和防火墙。
...全文
880 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
only_lonely 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lindenrty 的回复:]
如果就这2台机器 不设路由器似乎没可能
我只看到过这样的例子 2台机器由第三台公网IP的机器中转实现互联
不过这样还不如改网关方便
[/Quote]
直接通讯,得动路由,使用端口映射
不动路由,得有个公网的IP
ck11926375 2009-12-21
  • 打赏
  • 举报
回复
nat穿透,没做过。网上应该有
wxxloveu 2009-12-21
  • 打赏
  • 举报
回复
这个用P2P打洞啊,去我空间看我的贴吧
wangxiao2008 2009-12-21
  • 打赏
  • 举报
回复
up
lindenrty 2009-12-21
  • 打赏
  • 举报
回复
转贴
原帖地址:http://www.vjsdn.com/bbs/bbstopicdetails.aspx?html=0&pid=109221225

A->B打洞过程:

说明:
A:用户A
B:用户B
NA:NAT网络A
NB:NAT网络B
Server C为外网的机器(服务器或消息中转站)

A想与B建立通信通道,A to B打洞:
1.A ---> NA ---> Server C ---> NB ---> B
2.B---->A (打洞完成)

1,如果A想与B通信;
2,A首先连接 C, C得到A的外网NA的地址和端口;
3,B也要连接C,C得到B的外网NB的地址和端口;
4,A告诉C说我要和B通讯;
5,C通过NB发信息给B,告诉B A的外网NA的地址和端口;
6,B向NA发数据包(肯定会被NA丢弃,因为NA上并没有 A->NB 的合法session),
但是NB上就建立了有B->NA的合法session了;
7,B发数据包给C,让 C 通知 A,我已经把洞打好了;
8,A接受到通知后向 B 的外网发NB数据包,这样就不会被丢弃掉了。因为对于NB来说,它看到的是A的外网NA的地址,
而通过第6步,B已经让NA成为NB的合法通信对象了。所以当NA发数据包给NB时,NB就会接收并转发给B;


如果是做项目的话 这个方案也许比较合适
现在的P2P软件的内网互联,LowID to LowID也是采用的这类手段
但是路由上有防火墙规则的话,可能会被屏蔽掉
vrhero 2009-12-21
  • 打赏
  • 举报
回复
除非这两台PC其中有一台是完全暴露的DMZ主机或者使用预设TCP或UDP映射的IP,并且这台PC所在的网络有公共IP...

所以...“不必手动设置路由器和防火墙”基本是不可能的,而且如果没有公共IP或第三方公共IP转发就算你“设置路由器和防火墙”也是不可能的...
lindenrty 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hyblusea 的回复:]
简单的需求还可以使用WCF或者WEBSERVICE
单纯用SOCKET好像比较困难。我自己没有试成功过。需要用到打洞穿透NAT。
[/Quote]
如果我没理解错打洞技术 也许要第3台公网机器的协助才能实现
jimh 2009-12-21
  • 打赏
  • 举报
回复
要通信就必须要有公网IP和端口,有下面几个方法
1,用公网第三台机器中转
2,其中一台的局域网路由器做一个端口映射,相当于一台机器开放一个公网IP下的端口。
3,应该没有第三条路了
zhouyanfss 2009-12-21
  • 打赏
  • 举报
回复
说难很难,说简单也简单
那就说简单的,用路由器的端口映射功能,就是在各自路由器上设置你TCP通讯的端口映射到各自电脑的IP就可以了
hyblusea 2009-12-21
  • 打赏
  • 举报
回复
简单的需求还可以使用WCF或者WEBSERVICE
单纯用SOCKET好像比较困难。我自己没有试成功过。需要用到打洞穿透NAT。
lindenrty 2009-12-21
  • 打赏
  • 举报
回复
如果就这2台机器 不设路由器似乎没可能
我只看到过这样的例子 2台机器由第三台公网IP的机器中转实现互联
不过这样还不如改网关方便
hyblusea 2009-12-21
  • 打赏
  • 举报
回复

110,544

社区成员

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

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

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