使用TCP套接字将文件发送到多个客户端

时间:2013-01-07 10:49:20

标签: c# .net sockets filestream

我正在开发一个Web应用程序,它等待N(例如,大约5个)用户通过TCP套接字连接到Web服务。服务器跟踪连接的套接字数量,一旦达到N,他就会同时向所有这些文件发送一个(单个)文件,最多2MB。这里的重点是时间 - 他们应该同时收到文件,而不是一个接一个。

作为c#和socket编程的新手,我想知道在这种情况下最好的方法是什么? 我想到了以下几点: 服务器(异步)接收套接字连接,一旦到达N,循环遍历文件中的所有字节,并在每次迭代时向每个连接的客户端发送一个Kbyte(或者更少?) - 这在我的意见,是最接近同时发送文件的方式。

我对如何实现这一点感到困惑。 任何帮助都会很棒。 感谢

编辑: 通过同时接收我的意思,从技术上讲,我不希望服务器将文件发送到第一个客户端,然后发送到第二个,然后发送到第三个等,而是立即将它发送给所有这些,一次它离开服务器,它不在我的手中!假设没有网络问题,并且客户端都非常接近(物理上),他们应该或多或少地同时接收文件。 也许解决方案比我想象的要简单......

1 个答案:

答案 0 :(得分:0)

您已经计划异步接受套接字连接,并且由于回调发生在单独的线程上,您可以简单地使用异步回调:

  • 接受传入套接字连接
  • 再次调用BeginAccept()(在侦听套接字上)
  • 发送文件
  • 关闭(以前接受的套接字)的连接

如果多个客户端同时连接,这将导致多个线程同时发送文件,几乎同时发送。

您的文件可能会被多个线程同时访问,因此您必须使用FileShare.Read打开它。

希望这有帮助,我忽略了“N个并发客户”,因为我知道这不是一个真正的要求。