2011-02-03 46 views
2

我必须开发一个软件发送相同的数据包到多个目的地。 但我不能使用多播方案。 (因为我的老板是一个愚蠢的男人) 所以,任何方式,问题是: 我有相同的数据包和多个IP地址(客户端),我不能使用多播 我怎么能以最好的方式做到这一点? 我必须使用C++作为一种语言和Linux作为平台。 所以请帮我发送相同的数据包到多个客户端

感谢名单

+6

我不知道你的老板是不是一个愚蠢的人,但是......他是你的老板,这是一个公共场所。我不确定侮辱他会带来什么问题。他可能有拒绝使用组播的理由。 – ereOn 2011-02-03 08:59:31

回答

0

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

如果这些是必备条件,那么您唯一的机会就是与要发送数据包的每个远程主机建立TCP连接。

编辑
UDP,反之,将不提供对多播多少好处,如果你的应用程序将运行在一个LAN你是在收费的配置,这就是我指定的TCP的原因。

也许你必须更好地描述你的方案。

+0

我强烈反对你的声明“UDP不会提供任何多播优点”:实际上,大多数路由器阻止IPv4多播帧,而UDP数据包不阻止。 – ereOn 2011-02-03 09:02:57

0

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

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

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

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

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

0

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

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

您已经通过对多播说“no”来限制自己。我猜想将数据包发送到多个客户端只是您的要求的一部分,除非您投入更多的灯光,否则很难提供完整的解决方案。

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

您必须遍历客户端并逐个发送数据包。如果您希望客户回应,您可能需要坚持这些会话。

UDP或TCP的选择依赖于发送数据的性质。使用UDP,您需要处理不按顺序的数据包,并且还需要执行重新传输。

相关问题