我必须开发一个软件来将相同的数据包发送到多个目的地。 但我不能使用组播方案。!!!! (因为我的老板是个傻瓜) 所以,无论如何,问题在于: 我有相同的数据包和多个IP地址(客户端),我不能使用多播 我怎么能以最好的方式做到这一点? 我必须使用c ++作为语言,使用Linux作为平台。 所以请帮帮我
感谢名单
答案 0 :(得分:0)
如果你的老板说你不能使用组播,也许他/她有他/她的理由。我猜广播也不在游戏中了?
如果这些是必需品,您唯一的机会是与要发送数据包的每个远程主机建立TCP连接。
修改强>
相反,如果您的应用程序将在您负责配置的LAN上运行,则UDP不会提供多播的好处,这就是我指定TCP的原因。
也许你必须更好地描述你的情景。
答案 1 :(得分:0)
这可以使用TCP或UDP来完成,具体取决于您的可靠性要求。你能容忍丢失或重新排序的数据包吗?你准备好处理超时和转发吗?如果两个答案都是“是”,请选择UDP。否则留在TCP。然后:
sendto(2)
。当时客户必须recv(2)
。如果您不了解您的客户,则需要为客户设计请求数据的方案,或者只是注册与服务器。这就是recvfrom(2)
有用的地方 - 它为您提供了客户的地址。答案 2 :(得分:0)
你通过拒绝多播来限制自己。我想将数据包发送到多个客户端只是您需求的一部分,除非您投入更多光线,否则很难提供完整的解决方案。
您是否期望客户端与服务器之间进行双向通信?在这种情况下,选择多播可能会很复杂。请澄清
您必须遍历客户端并一个接一个地发送数据包。如果您希望客户回复,您可能希望保留会话。
UDP或TCP的选择再次取决于发送数据的性质。使用UDP,您需要处理无序数据包,还需要实现重传。
答案 3 :(得分:-1)
您必须在运行于特定端口的服务器上创建TCP Listerner,以侦听传入的Tcp客户端连接(套接字)。
每次客户端连接时,您都必须将其缓存在某种数据结构中,如Name值对(名称是客户端amd值的唯一名称,该客户端的值是该客户端的网络流,因为TCP套接字)。
然后,当您最终准备好传输数据时,您可以遍历此名称值对连接集合,并将数据作为字节数组逐个发送到每个客户端,或者为每个连接的客户端关闭一个线程并让它发送数据同时发生。
TCP是一种庞大的协议(由于其面向连接的性质),大数据(如视频/图像)的传输可能非常慢。
UDP绝对是流式传输大型数据包的选择,但您必须与交付保证进行权衡。