gpt4 book ai didi

linux - 在服务器端写N次时是否应该读N次

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:23 25 4
gpt4 key购买 nike

服务器是这样的:

char buf[10];                                                               
memset(buf, 0, 10);
write(sock, "te", 2);
write(sock, "ab", 2);

客户端:

char buf[5] = {0};
read(connfd, buf, 5);

如果小于 2 + 2,我的意思是 5,但结果显示我只收到 2 个字节,即“te”。此链接read() is not blocking in socket programming已经告诉我了

When you call N write() at server its not necessary there should be N read() call at other side.

我的理解或代码有什么问题?我应该使用另一个系统调用还是其他东西。

最佳答案

当使用面向流的套接字(如 TCP)时,无法保证读取和写入的数量。这意味着一次写入可以通过多次读取来读取,而多次写入可以通过一次读取来读取。通常,如果写入时间短且间隔较短,则每次写入都会有一次读取,但这并不能保证。这里你只读了 2 个字节。那可能会发生,你只需要再调用一两个 read 即可。请注意,如果您使用的是环回接口(interface),读取和写入调用可能非常匹配,因此每次写入可能只有一个读取调用,但同样您不能确定。通常的模式是继续循环读取,直到获得所需的字节数。

如果您使用面向数据报的套接字,如 UDP,一次写入将正好是一次读取(如果传输成功),如果提供的读取缓冲区太短,一些数据将被丢弃。

关于linux - 在服务器端写N次时是否应该读N次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27947307/

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