如何实现客户端之间的p2p通信

lglyoung 2014-03-02 11:38:13
情况是:
多个客户端可以通过SOCK_STREAM类型的socket连接到服务器上,我现在想实现客户端之间的对等通信(用SOCK_DGRAM)。
我的想法是:
在客户端再创建一个socket,类型为SOCK_DGRAM,但是这样的话,就还应该绑定一个端口(假设为SOCK_DGRAM_PORT),同时该端口应该是随机的,要不然一台机器只能运行一个客户端了?
接下来,客户端A为了与客户端B通过sendto发送消息,就该知道B的SOCK_DGRAM_PORT端口。由于A与B没有建立连接,就得通服务器获取B的SOCK_DGRAM_PORT端口,所以在客户端B上线时,服务器就应该保存B的SOCK_DGRAM_PORT端口,从而,服务器为了获取客户端B的SOCK_DGRAM类型socket的消息,也应该有一个SOCK_DGRAM类型的socket来接收。
也不知道我的想法行不行。同时我也觉得太麻烦了,感觉效率也不高。各位前辈是怎么做的呀?我该补充哪些知识呢?或者大家有没有好的文章推荐?求指教。
...全文
1235 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiwei0124 2014-03-28
  • 打赏
  • 举报
回复
Client A和B之间的通信采用UDP,这样A和B都需要创建一个UDP的socket 服务器也需要一个UDP的SOCKET,用于接收A、B的 UDP socket 信令,然后服务器就可以获取到A、B UDP socket的公网端口号了,并且通知双方对方的UDP socket 的公网端口号是多少 A、B 在知道对方的UDP socket 公网端口后,就可以开始发送穿透信令了(穿透信令可以是任意包,只要对方可以识别就行), 穿透的成功率与双方的路由器NAT类型有关。
lglyoung 2014-03-04
  • 打赏
  • 举报
回复
引用 4 楼 songhtao 的回复:
不用,一个socket同时与服务器和另一个客户端通信。
如果是用一个socket的话,那客户端之间为了通信,不就得建立连接了?因为客户端与服务器通信的时候,采用的是tcp。
我不懂电脑 2014-03-04
  • 打赏
  • 举报
回复
不用,一个socket同时与服务器和另一个客户端通信。
lglyoung 2014-03-04
  • 打赏
  • 举报
回复
引用 7 楼 action456789 的回复:
我也没做个这方面的东西,持续关注中!!
我也没学过~~毕设选了这方面的题
lglyoung 2014-03-04
  • 打赏
  • 举报
回复
引用 6 楼 Ring_Pt 的回复:
你的客户端与客户端之间的通信是直接通信的吗? 如果客户端A要发送消息给客户端B应该是A将消息发送给服务器,服务器收到消息后转发给B的。 而不是A和B直接的通信
我现在就是想实现客户端之间的直接通信。
action爱生活 2014-03-04
  • 打赏
  • 举报
回复
我也没做个这方面的东西,持续关注中!!
Jim@luckeeinc.com 2014-03-04
  • 打赏
  • 举报
回复
你的客户端与客户端之间的通信是直接通信的吗? 如果客户端A要发送消息给客户端B应该是A将消息发送给服务器,服务器收到消息后转发给B的。 而不是A和B直接的通信
我不懂电脑 2014-03-03
  • 打赏
  • 举报
回复
一般p2p都是借助中间服务器通知两个客户端对方ip和端口来实现的。
lglyoung 2014-03-03
  • 打赏
  • 举报
回复
引用 1 楼 songhtao 的回复:
一般p2p都是借助中间服务器通知两个客户端对方ip和端口来实现的。
那客户端是不是要有两个socket,一个是tcp,用来与服务器进行连接,另一个是udp,用来与其他客户端通信?
lglyoung 2014-03-03
  • 打赏
  • 举报
回复
那客户端是不是要有两个socket,一个是tcp,用来与服务器进行连接,另一个是udp,用来与其他客户端通信?

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧