一个人-我的学习随笔

有时候对待技术就好像对待女人,我们通常在已经了解或者相信她有着诱人的身体的时候,才会乐于或者有耐心对待脱衣的前戏。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
一.
Client A 和Client B处于不同的局域中,在网络环境中,只是其中的一种类型,这种类型如果想使用UDP连接成,需要一个Server才能实现:
1、Client A/B 需要连接Server
2、当Client A 连接 Client B 时,同时Client A与Server发出信息通知Client B也来连接Client A 的外网IP和端口,ClientA/B连续向对方发送几次信息,就可以连接成功了.
原文http://www.delphibbs.com/delphibbs/dispq.asp?lid=2478089


二.
用UDP实现P2P虽然可以做到,但实际应用中有很多限制,比如很多只能通过HTTP代理上网,UDP被禁止,我这里就是这样。如果用TCP协议能做到完全的P2P,那才是无敌!当然总需要一个地方来交换连接信息,所以我讨论的是需要一个握手服务器的情况下实现TCP协议的完全P2P。现在我正在实验这种可能性,如果哪位有兴趣,也可以参与实验。思路如下:
1)局域网内机器A,通过任意网关或代理上网,TCP协议可用(其实能上internet的都满足)
2)局域网内机器B,其它同1)
3)一个握手用的服务器C在共网上
现在假如A要向B发送数据,可以这样:
1)A连接到C,B连接到C
2)C将B的Socket连接信息发给A,A收到信息后创建一个原始Socket,并用收到的信息创建TCP包,仿真TCP协议发送这些TCP包,那么在B看来,这些TCP包就是从C发出的,只要B和C的连接没有断开,B就会收到并处理这些数据
3)B向A发数据也是一样的,只要在B上创建原始Socket就可以了
这个方案里,C没有为它们转发数据,A和B之间并没有建立真正的连接,只是利用了对方和C之间的连接通道,冒充了C而已(有点不太光彩)。理论上,这种方案应该能穿过任何防火墙和网关,只要双方能上网,就能互相交换数据,P2P不就是为了直接交换数据么?!
原文http://www.delphibbs.com/delphibbs/dispq.asp?lid=2391151
posted on 2005-05-09 16:07  oisiv  阅读(419)  评论(0编辑  收藏  举报