我们应该怎么做才能让C#Silverlight Tcp Packet成为一个整体?

问题描述:

当我们向客户端发送大量数据时,它的ReceiveAsync事件不止一次被调用,并且每次我们得到一些数据包。
我们应该如何通过一个事件来获取C#Silverlight Tcp数据包? 预先感谢您。我们应该怎么做才能让C#Silverlight Tcp Packet成为一个整体?

你不能。 TCP的本质是数据被分解成数据包。保持接收数据,直到你收到完整的消息(不管是什么)。这方面的一些选项:

  • 首先在消息本身之前发送消息的大小。
  • 关闭连接时,已发送邮件(这样基本上可以阅读客户端,直到连接被关闭)
  • 添加一个分隔符,用于指示消息的结尾

我一般不喜欢最后一个选项,因为它意味着在阅读时“理解”该消息,这可能会非常棘手 - 并且可能意味着如果您的分隔符自然发生在消息中,则需要添加转义序列等。

+0

感谢您的提前,但正如我所知道的Tcp/IP协议做这项工作。 为什么我必须这样做?为什么我必须在应用程序级别上关心它? – Noro 2010-07-30 08:19:05

+0

@Noro:因为TCP/IP只是为您提供了一个有效的数据流。应用协议决定如何处理该流 - 如何将其分为消息等。 – 2010-07-30 08:57:54