繁体   English   中英

套接字编程中读取的用法

[英]Usage of read in socket programming

在使用C编程中读取的阻塞功能时,有什么方法可以区分有效载荷与不同数据包吗? 我正在从TCP客户端以数据包的形式发送每个消息,当我在TCP服务器中读取(使用读取功能)它时,我将所有消息都放在缓冲区中,而两者之间没有任何分隔符。

您将必须在应用程序层上自己实现它。

一种方法是例如Type-Length-Value。

您发送的每条消息都具有以下结构:

1 byte | 2 byte | length bytes
type    length   value

更多细节在这里

注意, read不能完全读取指定的字节数,它可以读取的字节数更少-因此您需要检查其返回值。 例如看这个

您可能还需要了解一些二进制协议的陷阱。

另外,建议您对网络编程进行一些背景阅读,例如, 在此处 -请参阅第7章。

TCP是面向流的,这意味着没有可以将它们分开的包,因此您必须实现自己的协议,例如,可以在发送每个包之前发送4字节的报头数据,并在接收器中告诉接收器下一个包的大小。接收端,您应该始终读取4字节的标头(标识下一个数据包的大小),并使用标头中指定的大小进行阻塞读取。

另一种选择是使用固定大小的数据包,因此每次您都必须从TCP缓冲区读取固定大小的数据包时。

不同于TCP,UDP可以根据需要面向数据包。 在UDP数据包中,接收到的数据包的大小与已发送的大小相同,并且不会发生其他任何缓冲或串联,但是它不可靠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM