将相同的包发送到多个客户端

时间:2011-02-03 08:06:46

标签: c++ linux sockets

我必须开发一个软件来将相同的数据包发送到多个目的地。 但我不能使用组播方案。!!!! (因为我的老板是个傻瓜) 所以,无论如何,问题在于: 我有相同的数据包和多个IP地址(客户端),我不能使用多播 我怎么能以最好的方式做到这一点? 我必须使用c ++作为语言,使用Linux作为平台。 所以请帮帮我

感谢名单

4 个答案:

答案 0 :(得分:0)

如果你的老板说你不能使用组播,也许他/她有他/她的理由。我猜广播也不在游戏中了?

如果这些是必需品,您唯一的机会是与要发送数据包的每个远程主机建立TCP连接。

修改
相反,如果您的应用程序将在您负责配置的LAN上运行,则UDP不会提供多播的好处,这就是我指定TCP的原因。

也许你必须更好地描述你的情景。

答案 1 :(得分:0)

这可以使用TCP或UDP来完成,具体取决于您的可靠性要求。你能容忍丢失或重新排序的数据包吗?你准备好处理超时和转发吗?如果两个答案都是“是”,请选择UDP。否则留在TCP。然后:

  • TCP案例。您将拥有多个TCP套接字,而不是单个多播UDP套接字,每个目标一个。您必须找出建立连接的最佳方案。定期收听和接受连接客户端照常工作。然后,您只需迭代连接的套接字并将数据发送给每个套接字。
  • UDP案例。这可以通过服务器端的单个UDP套接字来完成。如果您知道客户端(数据接收器)的IP和端口,则对每个地址/端口使用相同数据的sendto(2)。当时客户必须recv(2)。如果您不了解您的客户,则需要为客户设计请求数据的方案,或者只是注册与服务器。这就是recvfrom(2)有用的地方 - 它为您提供了客户的地址。

答案 2 :(得分:0)

你通过拒绝多播来限制自己。我想将数据包发送到多个客户端只是您需求的一部分,除非您投入更多光线,否则很难提供完整的解决方案。

您是否期望客户端与服务器之间进行双向通信?在这种情况下,选择多播可能会很复杂。请澄清

您必须遍历客户端并一个接一个地发送数据包。如果您希望客户回复,您可能希望保留会话。

UDP或TCP的选择再次取决于发送数据的性质。使用UDP,您需要处理无序数据包,还需要实现重传。

答案 3 :(得分:-1)

您必须在运行于特定端口的服务器上创建TCP Listerner,以侦听传入的Tcp客户端连接(套接字)。

每次客户端连接时,您都必须将其缓存在某种数据结构中,如Name值对(名称是客户端amd值的唯一名称,该客户端的值是该客户端的网络流,因为TCP套接字)。

然后,当您最终准备好传输数据时,您可以遍历此名称值对连接集合,并将数据作为字节数组逐个发送到每个客户端,或者为每个连接的客户端关闭一个线程并让它发送数据同时发生。

TCP是一种庞大的协议(由于其面向连接的性质),大数据(如视频/图像)的传输可能非常慢。

UDP绝对是流式传输大型数据包的选择,但您必须与交付保证进行权衡。