当前位置: 首页 > 知识库问答 >
问题:

多播udp套接字的C实现

向嘉誉
2023-03-14

我想在服务器端和客户端使用多播套接字。服务器将发送数据,客户端将接收数据。同时,如果数据丢失,客户端将向服务器发送nack数据包,服务器将收到nack数据包。我应该如何实现这一点,一个多播组和一个套接字端口,两个多播组和两个套接字端口?我希望服务器可以同时发送数据和接收nack,这可能吗?

非常感谢。

共有1个答案

寇夜洛
2023-03-14

您必须首先决定1)服务器是否使用初始多播组发送丢失的数据包;2) 第二多播组;或3)与客户端的单播连接。在第一种情况下,服务器或客户端都不需要额外的套接字。在第二种情况下,服务器和客户端都需要额外的套接字。在第三种情况下,客户端需要一个额外的套接字,服务器需要为每个客户端提供一个额外的套接字。

上面介绍了从服务器向客户端发送数据包的套接字要求。要将NACK从客户端发送到服务器,您需要确定客户端是否将使用1)相同的初始多播组2)上述第二种情况的辅助多播组发送NACK;3) 专用于nack的不同多播组;或4)与服务器的单播连接。只有在最后两种情况下,客户端才需要另一个套接字。对于第三种情况,服务器将需要一个额外的套接字,对于第四种情况,每个客户端将需要一个额外的套接字。

服务器可以使用多个线程同时多播数据包并对丢失的数据包做出响应。

这是一个非常活跃的研究领域(我是其中的一员)。祝你好运。

 类似资料:
  • 我必须通过udp套接字发送多个变量类型:int数组和char。我想用相同的udp数据包发送它。标准溶液是什么?将所有内容转换为字节或类似的内容? 我使用的是:sendto(int-sockfd,const-void*buf,size\t len,int-flags,const-struct-sockaddr*dest\u-addr,socklen\t-addrlen); 我的代码是这样的:

  • 问题内容: (英语不是我的母语,不用担心某些句子是否很奇怪;)。 我正在开发 PONG游戏, 并且通过创建一些类来帮助我管理窗口,事件…和 网络, 因为我在游戏中添加了 LAN功能 ,但是当前您必须输入您想与之联系的人的地址。一起玩。解决此问题的方法是 广播(扫描播放器的LAN) 。对于ipv4来说这很容易,只需使用地址255.255.255.255,但是我们在2017年就提供了仅适用于ipv4的

  • 这是我的客户端和服务器的代码。 class Client1{Client1(int no){try{String message;message=“Hello this is client”+no;byte[]b=message.getBytes();DatagramPacket dp=new DatagramPacket(b,b length,inetAddress.getLocalHost()

  • 为了实现这一点,我使用了队列/线程池机制。最初,我创建一个固定数量线程的池,并有一个队列datastructure来存储客户机地址。这个队列在所有线程之间共享,因此我使用“互斥”来锁定/解锁这个队列。在主服务器线程中,我创建一个套接字,将其绑定到全局端口/地址,然后在“recvfrom”调用上阻止服务器。任何希望与服务器通信的客户端都会向侦听全局端口地址的主线程服务器发送“HI”消息。主服务器线程

  • 因此,我可以像为TCP套接字一样为每个客户端创建一个不同的UDP套接字吗? 注意:如果可能,请使用类来解释,而不是类。 代码说明:我以为建立TCP连接(Connect/Accept)后可以在两边(客户机/服务器)绑定一个UDP套接字。对于服务器上只有一个客户机是很好的。对于新客户机,server会引发异常,因为它无法将多个套接字与一个localEndPoint绑定在一起。和客户端可以超过所有可用端

  • 我写了一个简单的udp服务器客户端应用程序与多播套接字。服务器每6毫秒向三个客户端发送数据包。数据包大小为1200字节。这是每秒166,66个数据包。每当其中一个客户端检测到丢失的数据包时,它将通过单播向服务器发送NACK数据包。 第一个测试:服务器和三个客户端通过以太网连接到路由器TP链路TL-WDR4300(dd wrt),一切正常。 第二次测试:只有服务器通过以太网连接到路由器,其他客户端通