gpt4 book ai didi

c++ - send() 没有传送所有字节?

转载 作者:可可西里 更新时间:2023-11-01 02:33:17 25 4
gpt4 key购买 nike

为什么 winsock 中的 send() 不能保证传送您请求的所有字节?

这是 TCP,它正在阻塞套接字。

同样,这发生在非阻塞时。你怎么能保证你发送的一切?

我注意到 recv() 也有同样的作用。

最佳答案

如果它没有发送所有内容,只需再次调用 send 即可。如果阻塞,您可以立即执行。如果是非阻塞的,您可以等待或使用套接字发现方法(如 select 或 I/O 完成端口)。 recv 也是如此。如果您没有得到所有想要的,请再次调用 recv。这是 recvsend 都返回发送或接收的字节数的原因之一。

您传递给sendrecv 的字节数只是一个限制。它可以发送少于那个(尽管,除非非阻塞,通常不会)。但它绝对可以收到少于那个。 (操作系统无法控制它接收的数据量或接收数据的时间。)

TCP 已为您实现。但是,如果您有涉及应用程序级消息的应用程序协议(protocol),则应用程序必须实现它们。它不会通过魔法发生。 TCP 不会将字节“粘合在一起”为您发送消息。 TCP是字节流协议(protocol),不是消息协议(protocol)。如果你想要消息,你必须实现它们。

关于c++ - send() 没有传送所有字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14399691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com