【发布时间】:2020-07-31 00:53:42
【问题描述】:
我想通过 UDP 发送不同大小的数据。要发送的数据大小不固定。我有以下情况:
unsigned char buffer[BUFFERSIZE];
int bytes = fill_buffer(buffer, sizeof(buffer)): // Returns number of filled bytes.
sendto(socket, buffer, bytes, 0, (struct sockaddr *)&server, sizeof(server))
在上面的例子中,接收方不知道要接收多少字节。我还想到了先发送要接收的字节数,然后再发送数据。但在那种情况下,我不知道如果数据包乱序到达会发生什么。
发送方将是
sendto(socket, &bytes, sizeof(bytes), 0, (struct sockaddr *)&server, sizeof(server))
sendto(socket, buffer, bytes, 0, (struct sockaddr *)&server, sizeof(server))
接收方将是
recvfrom(socket, &bytes, sizeof(bytes), 0, NULL, NULL)
recvfrom(socket, buffer, bytes, 0, NULL, NULL)
但会不会是发送的数据乱序?
【问题讨论】:
-
您需要创建一个应用层协议,它可以包含一个序列号,以便您可以重新排序任何乱序数据。另外,请记住 UDP 将丢失数据报,因此您必须接受并非所有数据都能通过的事实,拥有可以请求重新发送丢失数据的应用程序或应用程序层协议,或者使用 TCP 之类的东西可以为您完成所有这些工作。
标签: c networking udp