gpt4 book ai didi

C Unix套接字编程,确保读/写字节数?

转载 作者:行者123 更新时间:2023-11-30 15:59:30 26 4
gpt4 key购买 nike

我正在编写客户端和服务器程序,我正在寻找一种方法来确保在使用 read() 或 write() 到/从客户端/服务器打开的套接字时读取所有字节并发送所有字节.

我假设我必须使用循环来检查从读取或写入函数返回的字节数。

可能是这样的:

#define BUFFER 20
char buffer[BUFFER];

while (I haven't read all bytes from the buffer){
int bytesRead = read(theSocket, myWord, BUFFER);
}

如何确保我尝试使用 write() 传输的所有字节都已传输?

感谢您的帮助!

最佳答案

是的,就是这样。典型的读取逻辑如下:

1) 调用read

2) 我们收到 EOF 或错误了吗?如果是,则返回。

3) 我们收到所有字节了吗?如果是,则返回。

4) 转到步骤 1。

请注意,当您调用read时,您需要在已读取的数据之后向其传递一个指向缓冲区的指针,并且您需要尝试读取适当数量的数据不会溢出缓冲区的字节。此外,如何判断是否收到了所有字节取决于协议(protocol)。

写:

1) 调用write,向其传递一个指向第一个未写入字节的指针以及未写入字节数。

2) 我们得到的是零还是错误?如果是,则返回。

3) 我们写了所有字节吗?如果是,则返回。

4) 转到步骤 1。

请注意,您必须针对阻塞或非阻塞套接字进行适当调整。例如,对于非阻塞套接字,您必须处理 EWOULDBLOCK

关于C Unix套接字编程,确保读/写字节数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8875208/

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