2013-01-07 434 views
0

我正在开发一个等待N(比如5个)用户通过TCP套接字连接到web服务的web应用程序。服务器会跟踪连接的套接字的数量,一旦达到N,他就会同时发送一个(单个)文件,比如2MB。这里强调的是时间 - 他们都应该同时接收文件,而不是一个接一个地接收文件。使用TCP套接字发送文件到多个客户端

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

我对如何实现这一点感到困惑。 任何帮助将是伟大的。 感谢

编辑: 通过接收在同一时间我的意思是,从技术上来说,我不希望服务器将文件发送到第一客户端,然后到第二,然后第三等,而是发一旦它离开了服务器,它就立刻变成了它们,它已经不在我的手中了!假设没有网络问题,并且客户端都非常接近(物理上),他们应该同时接收文件或多或少。 可能解决的办法是比我想象的更简单...

+1

我想你正在寻找多播。 –

+0

Ya多播概率 – rbtLong

+1

不,可能不是。多播有严重的基础设施要求,不适用于互联网。在公司网络上,除非使用ICMP,否则它会泛滥网络。我非常喜欢它,但是根据这些信息推荐多播是严重的忽视,并且边界对网络没有任何线索。这可能适用于非组播基础设施(大多数公司都与互联网一样)。 – TomTom

回答

0

你已经打算接受异步套接字连接并自回调在一个单独的线程中发生,你可以简单地用异步回调:

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

如果多个客户端立即连接,这将导致多个线程同时发送文件,并且几乎在同一时间。

您的文件可能会被多个线程一次访问,因此您必须打开它,例如FileShare.Read

希望这会有所帮助,我忽略了“N同时发生的客户”,因为我知道这不是一个必要条件。

相关问题