如何通过中间服务器建立两个局域网间的直接连接(MSN好象做到了)

gfh21cn 2003-09-23 05:55:42
环境:
有一台机器做服务器,有公网的固定的IP地址,一个程序做服务程序,当客户(客户1)连接的时候,服务器记录下这个客户程序的Address和Port.(如果是局域网通过ADSL上网的话,得到的Address是ADSL的地址,Port是一个映射的Port),其它客户(客户2)端从服务器上获得了这个地址和端口,1.如果客户2直接连接是不行的2.让客户1在连接后监听,好象不行.

究竟该如何实现两个局域网间的直接连接

MSN和QQ好象都是可以直接连接的.

请各位高手帮我.

我的Email:gfh21cn@hotmail.com
gfh21cn@163.com

谢谢了
...全文
284 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
sncel 2003-09-24
  • 打赏
  • 举报
回复
我有端口映射的源代码。
invalid 2003-09-24
  • 打赏
  • 举报
回复
那就有点复杂了吧,要看看操作协议了。
gfh21cn 2003-09-24
  • 打赏
  • 举报
回复
这个好象是个软件
如何自己写呢
gfh21cn 2003-09-24
  • 打赏
  • 举报
回复
谢谢,我先看看
invalid 2003-09-24
  • 打赏
  • 举报
回复
http://www.raidenftpd.com/kb/cht-kb000000043.htm
提到msn使用了自动打开portmapping技术。
gfh21cn 2003-09-24
  • 打赏
  • 举报
回复
不懂
invalid 2003-09-24
  • 打赏
  • 举报
回复
http://www.raidenftpd.com/kb/cht-kb000000043.htm
这篇文章中提到msn穿透nat是msn自己开启了Port MApping。(我不是很肯定)
invalid 2003-09-24
  • 打赏
  • 举报
回复
你先看看这段话,可能能解决你的问题。
2.2 NAT內部對Proxy內IP 與 NAT內IP對NAT內IP(不同NAT)
NAT 內Client和Proxy內Client通話時,Proxy內Client要能發送數據給NAT內部的Client,則必須由NAT內的Client的接收端口向Proxy內的Client端發送出來時在Proxy上映射的可能端口發送數據,才能在路由器上生成我們能夠穿透NAT發送數據進入NAT的路由紀錄。這種情況下,我們通過Proxy內的發送端口向Server發送數據,從而獲得Proxy內的Client端發送給NAT內Client端數據在Proxy上的映射端口,再由NAT內Client端從Server上獲得這個端口和Proxy IP,發送數據即可實現穿透NAT。
NAT內Client和NAT內Client彩用同樣的處理辦法。
wyz52126 2003-09-24
  • 打赏
  • 举报
回复
学习学习!
gfh21cn 2003-09-24
  • 打赏
  • 举报
回复
那是不是那个固定的IP地址,通过循环扫描这个代理的各个端口
如果连接上,就发送一个测试的数据
客户端的ServerSocket接受到这个测试数据
给服务器返回一个确认的东西.
这样就确立了这个服务的端口
但,不对啊,它没有对网外建立连接
不可能有NAT转换的PORT端口了
invalid 2003-09-24
  • 打赏
  • 举报
回复
Serversocket监听端口,这个端口在本局域网里有用,但对于网外的就不一样了,因为它的端口经过NAT的转换,我如何知道这个转换过的端口呢(我想问题就在于这儿)

除非设置了端口映射,否则局域网内的监听端口只在局域网内部有用。
它不会被nat转换的。
gfh21cn 2003-09-24
  • 打赏
  • 举报
回复
我上面的方法
就是先做客户端连接到有固定的IP的服务器,然后转而监听这个端口
我估计是监听时候出来问题
1.原先的会话断了,也就是说NAT的PORT变了
2.根本就没有监听
invalid 2003-09-24
  • 打赏
  • 举报
回复
qq和msn也没有办法啊。不同的局域网直接就是这样的。没有好办法了。
qq的逻辑可能要复杂一些。估计会判断两个客户端的ip地址是否相同,
如果相同则会用两个客户端的内部地址来让两个客户端互通。这样在一个公司内部传送文件就会很快了。

以上属于猜测!
gfh21cn 2003-09-24
  • 打赏
  • 举报
回复
不可取,我不可能让用户去做这些事情
invalid 2003-09-24
  • 打赏
  • 举报
回复
有个办法就是在nat上设置端口映射。把指定范围的端口都映射到局域网的机器上。
这种方式肯定不是qq和msn采用的。
gfh21cn 2003-09-24
  • 打赏
  • 举报
回复
我这个项目
很多客户都是通过局域网代理上网的
如果都从服务器转,我想服务器的压力太大了
这不是一个好的方案
invalid 2003-09-24
  • 打赏
  • 举报
回复
如果是通过nat转换那就不行了啊。
只能采用服务器中转数据方式。
gfh21cn 2003-09-24
  • 打赏
  • 举报
回复
在外网看到的应该是这个局域网代理的IP和转换过的PORT
而不是我们指定的Serversocket监听端口
gfh21cn 2003-09-24
  • 打赏
  • 举报
回复
我现在假设是两个互不相干的局域网
你刚才说到的:
客户端打开ServerSocket端口,并用ClientSocket连接通知服务端打开了Serversocket监听端口。
Serversocket监听端口,这个端口在本局域网里有用,但对于网外的就不一样了,因为它的端口经过NAT的转换,我如何知道这个转换过的端口呢(我想问题就在于这儿)
invalid 2003-09-24
  • 打赏
  • 举报
回复
又好像成功了?
你应该把这些过程的所连接的ip和端口都给show出来。同时配合Telnet来测试端口是否真的打开了。
加载更多回复(16)

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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