乡
乡村月光
Unregistered / Unconfirmed
GUEST, unregistred user!
用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不就是为了直接交换数据么?!
不知道这个方案里是否存在一些我没想到的问题,希望各位高手仔细帮我考虑一下,帮我指正,谢谢!另外,如果谁用这方法干坏事,和我无关哦!
有兴趣的朋友可以和我交流:amdom@mail333.com
(本贴200分,另外还有3贴300分!如果大家觉得有价值的话分可以再加!)
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不就是为了直接交换数据么?!
不知道这个方案里是否存在一些我没想到的问题,希望各位高手仔细帮我考虑一下,帮我指正,谢谢!另外,如果谁用这方法干坏事,和我无关哦!
有兴趣的朋友可以和我交流:amdom@mail333.com
(本贴200分,另外还有3贴300分!如果大家觉得有价值的话分可以再加!)