[英]C Unix socket programming, ensuring read/write byte counts?
我正在编写客户端和服务器程序,正在寻找一种方法,以确保在从客户端/服务器打开的套接字使用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
,您需要在已读取的数据之后向其传递一个指向缓冲区的指针,并且您将需要尝试读取不会溢出缓冲区的适当数量的字节。 另外,如何确定是否收到所有字节取决于协议。
来写:
1)调用write
,向它传递一个指向第一个未写字节和未写字节数的指针。
2)我们得到零或错误吗? 如果是这样,请返回。
3)我们写完所有字节了吗? 如果是这样,请返回。
4)转到步骤1。
请注意,必须针对阻塞或非阻塞套接字进行适当调整。 例如,对于非阻塞套接字,您必须处理EWOULDBLOCK
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.