假设有4个客户端,分别在不同的局域网。每局域网有1台网关与INTERNET连接。公网有服务器S。
现在有群聊窗口W,A发送一条信息,要求B C D 都接到。
我想到两个方法:
1、A将给B的包发给S,S将此包发给B。B收到后给S发收到信息,S发给A。A用此法给 C D发信息。
这样客户端只需要给S通讯,在网关有一次穿透。2、A直接跟B C D 通讯。假设A已经知道B C D ip及端口。
A发命令给S,要求B向A打洞。A将包发给B,B回送收到包。B连接到S。(否则S再发指令B都收不到了)
A发命令给S,要求C向A打洞。A将包发给C,C回送收到包。C连接到S。
这样一个一个来,好象会很慢哦,如果A和B同时想另外三个发送信息,
A发命令给S,要求C向A打洞。S收到命令,命令C向A打洞。C向A打洞。B发命令给S,要求C向B打洞。S收到命令,命令C向B打洞。此时C向A敞开,S的指令被丢弃。于是B的信息无法送达C。如果A发指令给S,要求B C D同时向A打洞,B C D 向A打洞。A依次发送信息给 B C D,D确认包收到,B C确认包被丢弃。(如果收到上一个确认包再给下一个发包,跟上面一个一个发一样了。这里说的是一次发完。)所以我很困惑,除了第一个方法,怎么样可以实现类似于QQ的群聊????