Ant*_*ony 15 c sockets networking tcp broadcast
我正在用C编写服务器/客户端系统,它在TCP连接下使用BSD套接字.服务器是多线程的,每个连接都在自己的接收器中运行.每个客户端都能很好地与服务器进行一对一的交谈,遗憾的是我无法想到实现SendToAll()函数的方法,例如,如果客户端A做了需要发送数据包的事情.所有的客户.我该怎么做?
我正在考虑在每个接收器中实现一个队列,并将任何广播发送到这些队列; 当接收器发出一个新数据包时,它会将该消息添加到数据包中,如果这有意义的话.
但是,有没有办法通过TCP广播,就像你可以通过UDP?
shf*_*301 13
正如每个人都说TCP不可能,它只是单播.然而,存在可靠多播的实现,这应该为您提供具有TCP可靠性的多播.请参阅维基百科,尤其是Pragmatic General Multicast.
不,没有.例如,如果您尝试与多方交谈,窗口大小的概念及其调整方式将变得毫无意义.
有可能创建一个新协议,该协议在允许多播的同时共享TCP的许多属性.但我认为这将是非常有问题的.例如,接收者接收数据的速度将受到最慢接收器的限制.发送方必须管理缓冲区空间,以便即使是最慢的接收方也可以在必要时进行重新传输.
不,我认为进行多播的协议总是必须是非常特殊的目的,并专注于手头的确切问题.一般化和类似TCP的东西是不可行的.
有多种方法可以进行可靠的多播批量数据传输.其基本思想是利用擦除码以一种循环的连续发送信息.然后,收件人可以直接开始接收数据包,直到他们有足够的重建原始文件.
但这些似乎并不适合你的情况.