如何将两个SOCKET连接起来

时间:2021-05-19 04:19:55
一服务器在Listen,客户端A connect,客户端B 也connect 服务器accept两个socket,服务器如果操作才能将这两个连接起来,使得客户端A send 客户端B 就可以recv,不再通过服务器
用于路由器穿透啊,有其他方法也给分

7 个解决方案

#1


典型的p2p网上这些东西很多了

#2


服务器把B的ip地址,等信息告诉A,然后让它们去连接..类似P2P。

#3


A 是某路由下的某台机器,我得到了总是路由的地址,如何得到路由下某机的IP地址及端口呢

#4


就算得到了,也是内网IP地址,如何能让两头都是某路由下的某机器SOCKET连通呢,服务器如何中转

#5


用UDP打洞相对比较容易,客户端A、B分别向服务器发送UDP包,服务器接收时可以取得A、B的公网IP和端口号,将其分别发送给B、A,然后A、B之间再相互发包联系(重复多次),当双方都收到对方的数据后就可以进行通讯了。

如果使用TCP,据说(我没有验证)可以将socket设置为允许复用,在连接服务器后断开,其中一方再listen这个socket,另一方连接。

#6


UDP那里没懂,A B拿到的是公网IP,A发往B的包,发到B所在路由器的IP上,路由器如何知道转发给谁,我这个程序的条件不可能做映射啊

#7


引用 6 楼 m_blackpp 的回复:
UDP那里没懂,A B拿到的是公网IP,A发往B的包,发到B所在路由器的IP上,路由器如何知道转发给谁,我这个程序的条件不可能做映射啊

既然都是公网IP,直接发就行了,那里还用管那么多

#1


典型的p2p网上这些东西很多了

#2


服务器把B的ip地址,等信息告诉A,然后让它们去连接..类似P2P。

#3


A 是某路由下的某台机器,我得到了总是路由的地址,如何得到路由下某机的IP地址及端口呢

#4


就算得到了,也是内网IP地址,如何能让两头都是某路由下的某机器SOCKET连通呢,服务器如何中转

#5


用UDP打洞相对比较容易,客户端A、B分别向服务器发送UDP包,服务器接收时可以取得A、B的公网IP和端口号,将其分别发送给B、A,然后A、B之间再相互发包联系(重复多次),当双方都收到对方的数据后就可以进行通讯了。

如果使用TCP,据说(我没有验证)可以将socket设置为允许复用,在连接服务器后断开,其中一方再listen这个socket,另一方连接。

#6


UDP那里没懂,A B拿到的是公网IP,A发往B的包,发到B所在路由器的IP上,路由器如何知道转发给谁,我这个程序的条件不可能做映射啊

#7


引用 6 楼 m_blackpp 的回复:
UDP那里没懂,A B拿到的是公网IP,A发往B的包,发到B所在路由器的IP上,路由器如何知道转发给谁,我这个程序的条件不可能做映射啊

既然都是公网IP,直接发就行了,那里还用管那么多