如何实现通过服务器,让两个客户端互相通信!
我的意思是,两个客户端A和B都各自通过一个socket和服务器连接,要求是tcp而不是udp, 然后其中一个客户端A向服务器发出请求,通过服务器的处理,实现另一个客户端B对其做出响应,即间接实现两个客户端的互联,有点p2p的意思!
谢谢了,在线等,马上结贴
问题点数:80、回复次数:16Top
1 楼nastar(阿门)回复于 2005-01-05 14:55:36 得分 40
当2个客户端都要留有一个监听端口(客户程序中定义),当双方都连接服务器成功后,服务器将另一个IP发过来,客户端就利用这个IP向另一个客户端发出连接请求。不知道这么解释你明白没有。
换句话说,客户端也要同时留一个服务套口。Top
2 楼nastar(阿门)回复于 2005-01-05 14:56:21 得分 0
客户端登陆服务器是为了获得对方的IP地址Top
3 楼tjjccnu(tini)回复于 2005-01-05 14:58:20 得分 0
你说的我明白,但是我想做的是,我发送一个请求,能够通过服务器直接让另一个客户端响应,就是直接修改ip头。
当然你说的这种情况,如果要和n台机器通信,不是每个客户端都要保留n个socket!Top
4 楼HunterForPig(留着口水的猪)回复于 2005-01-05 15:05:58 得分 0
tcp 讨论过很多次了
每次都是无疾而终Top
5 楼tjjccnu(tini)回复于 2005-01-05 15:08:41 得分 0
呵呵,是啊,upd好象可以实现!
那p2p软件都是什么原理呢?怎样实现的啊?比如bt!Top
6 楼balloy()回复于 2005-01-05 16:55:04 得分 0
http://www.ppcn.net/show.aspx?id=1306&cid=2
不过我还是有疑问,如果防火墙只开了80端口,那么该怎么办呢?
另外,to HunterForPig(留着口水的猪) :
TCP为什么不行呢?Top
7 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-01-05 18:42:10 得分 0
TCP不是不行,而是比较难以实现Top
8 楼sharkhuang(走吧走吧!人总会慢慢长大~)回复于 2005-01-05 20:51:47 得分 0
其实就是做了个2进制的管道Top
9 楼kingzai(stevenzhu)回复于 2005-01-05 23:01:16 得分 40
http://dev.csdn.net/Develop/article/23/23869.shtm
3.5. Simultaneous TCP open(TCP同时打开)
在一对节点都在已存在middlebox后,有一种建立直接P2P TCP连接的方法有时候会被使用。大多数TCP连接都是从一个终端发从一个SYN包到另一个终端,另一个中断同步响应一个SYN-ACK包。无论怎样,对于两个终端来说,同时通过发送同步包到对方然后用一个ACK包应答来建立一个TCP连接是可行的。这种过程就被称为"simultaneous open"(同时打开)
如果一个middlebox从尝试建立一个TCP连接的私有网络的外面接受一个TCP SYN包,middlebox通常以丢弃这个SYN包或者发送一个TCP RST(连接复位)包的方式来拒绝这个连接尝试。但是,如果同步包与源和目的地址端口一起到达,那么会让middlebox相信一个TCP连接已经建立起来,然后middlebox将会允许数据包通过。特别是如果middlebox刚刚得到并转换了一个从同样地址和端口来的SYN包,它将认为连接是成立的并允许进来的SYN通过。如果客户端A和B能彼此预测公共端口,它们各自的middlebox将分配下一个TCP连接端口,如果其中一个客户端和另一个客户端建立一个外部的TCP连接,可以在对方SYN到达本地middlebox之前就发送SYN包通过它本地自己的middlebox,那么P2P TCP连接就可以工作了。
...Top
10 楼balloy()回复于 2005-01-06 13:45:01 得分 0
多谢kingzai(stevenzhu) 提供的文章。
但是还是有问题,如果防火墙限定了某几个端口(假设只开了80、90),那么P2P程序该怎么办呢?Top
11 楼HunterForPig(留着口水的猪)回复于 2005-01-06 13:48:39 得分 0
如果防火墙限定了某几个端口(假设只开了80、90),那么P2P程序该怎么办呢?
那就用代理了Top
12 楼muroachanf(阿远之哈儿)回复于 2005-01-06 13:49:30 得分 0
路过Top
13 楼balloy()回复于 2005-01-06 17:26:49 得分 0
to HunterForPig(留着口水的猪) :
你说的用代理,是指用外网提供的代理了,对吗?
Top
14 楼HunterForPig(留着口水的猪)回复于 2005-01-06 19:21:52 得分 0
如果是两个内网client要通讯,那么代理当然要外网Top
15 楼balloy()回复于 2005-01-06 20:07:55 得分 0
多谢Top
16 楼tjjccnu(tini)回复于 2005-01-07 08:19:46 得分 0
问题没有解决,还是把分给了吧!
自己回去再研究研究!Top




