我试着理解从C(Linux)中的socket读取,这只是代码的一部分:
while(success == 0) {
while((n = read(sockfd, buffer, BUFFSIZE, 0)) > 0) {
printf("%s",buffer);
bzero(buffer,BUFFSIZE);
}
success = 1;
printf("###");
}
Run Code Online (Sandbox Code Playgroud)
打印信息,但三个哈希(###)永远不会打印?为什么?该程序似乎阻止了read().这里我只是打印,但我需要做的是缓冲整个消息然后处理它.
您需要知道您收到的消息有多大,并继续阅读,直到您收到整条消息(读取只能返回部分消息).
do {
nread = read(s, buf, to_read);
if (nread < 0 && errno == EINTR)
continue;
if (nread < 0) {
perror("read");
exit(1);
}
if (nread == 0) {
printf("socket closed");
... do something appropiate ...
... (reconnecting/exiting the loop with an error/...) ...
}
to_read -= nread;
buf += nread;
} while (to_read > 0);
Run Code Online (Sandbox Code Playgroud)
to_read是您期望读取的字节长度.buf有足够的空间.之后每次读取,更新to_read和buf相应.当然,您应该正确处理错误.
| 归档时间: |
|
| 查看次数: |
13579 次 |
| 最近记录: |