0

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

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

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

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

4

1 回答 1

0

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

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

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

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

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

于 2013-01-07T12:18:58.183 回答