如果数据已发送到客户端但客户端正忙于执行其他任务,那么使用recvfrom()读取数据的时间有多长?
此外,如果在读取第一个数据包之前发送了第二个数据包,那么第一个数据包是否丢失,下一个数据包是否等待被读取?
(Windows-UDP)
此外,如果在读取第一个数据包之前发送了第二个数据包,那么第一个数据包是否丢失,下一个数据包是否等待被读取?
(Windows-UDP)
recvfrom()
读取数据的可用时间是多久?
永远可用,或者根本不可用,或者直到您关闭套接字或读取至少一个字节为止。recvfrom
,那就是你会得到的。recvfrom
,都会从缓冲区中删除一个完整数据报(这是重要的细节!),并获取最多请求的字节数。这意味着,如果你天真地尝试读取几个字节,然后再读取几个字节,它就不起作用了。第一次读取将丢弃数据报的其余部分,并且随后的读取将读取一些未来数据报的第一批字节(并可能阻塞)!通常情况下,数据会被缓冲直到读取。我想如果你等待足够长的时间,驱动程序完全耗尽空间,它将不得不做一些事情,但是假设您的代码运行得比较合理,那就不应该成为问题。
一个典型的网络驱动程序将能够缓冲多个数据包而不会丢失任何一个。
recvfrom
没有指定从哪个发送者接收数据,它让你的程序找出发送者的地址(地址参数是输出而不是输入)。因此,不存在“除了我使用recvfrom之外的其他来源”。recvfrom
从所有来源接收数据。 - Ben Voigt