我正在使用 Berkeley C 套接字在 C/C++ 中编写一个实时网络系统,它在基于滴答的时间间隔上工作。每次滴答,客户端程序都会使用 recvfrom() 从套接字读取数据。
问题是如果服务器没有发送任何数据,客户端将读取在套接字上发送的最后一个数据。
例如客户端(伪代码)
while (true)
{
if (time_to_update())
{
int n = recvfrom(data,...);
printf("%s",data);
}
}
和服务器:
int main()
{
int m = recvfrom(data,...);
int n = sendto(...,"hello");
}
然后客户端会继续打印“你好”,而我只需要它打印一次。
这与这个问题很相似,recvfrom re-reading data on socket ,但我不太明白答案,它似乎更普遍地解决了问题。
我猜数据存储在网卡上的缓冲区中,在这种情况下,在读取 1 次后是否可以清除缓冲区?我想到的另一种方法是对数据包进行编号并且只读取新的数据包,但是所有类型都是有限的,所以我希望可能有一种更清洁的方法。
我将如何做到这一点,以便客户端只读取一次接收到的数据?