构建TCP消息以进行正确的数据传输

时间:2018-06-10 04:30:34

标签: c# networking tcp

我正在用C#编写一个程序,它有一个在多个客户端之间传输数据的服务器。现在,每当我需要发送数据时,我发送4个字节的长度和长度字节的数据,并且只要有数据可在接收端读取,它就会读取前4个字节作为长度并读取长度字节数为数据。

我想知道是否可能存在某些字节可能会以某种方式丢失的情况,然后我会因为读取错误的字节作为长度而试图读取数十亿字节的不存在的数据。

我想过使用一个独特的字符串,每当读取该字符串时,之后读取4个字节的长度,然后是某种校验和,然后是4个字节的随机ID,然后长度为读取字节。如果这些字节没有通过校验和或者在其中找到唯一字符串,则丢弃该消息并发送请求以通过其ID重新发送消息,并且将从下一次出现的消息开始接收下一条消息。独特的字符串。

这种方法是否足够好,还是应该以其他方式进行?

1 个答案:

答案 0 :(得分:0)

TCP是所谓的传输层协议。您可以阅读一本方便的入门书,了解为您提供的保证here

这反过来意味着您传输的所有数据都将按照发送的顺序可靠地接收。如果有任何东西在传输过程中丢失或损坏,TCP将重新发送它。这一切都发生在幕后,你不需要担心它。它还处理流量控制。

你必须要做的唯一不寻常的事情是处理连接意外丢失。除此之外(或者你可能已经在做),你所拥有的方法很好,尽管传统的做法是将这些长度字节放在线上,即所谓的网络字节顺序,这是大端的。我不知道你将如何在C#中做到这一点,但是支持这一点的C例程被描述为here。但是对于你正在做的事情,你可能不需要打扰。