[英]Reading message from socket in C
我试着理解从C(Linux)中的socket读取,这只是代码的一部分:
while(success == 0) {
while((n = read(sockfd, buffer, BUFFSIZE, 0)) > 0) {
printf("%s",buffer);
bzero(buffer,BUFFSIZE);
}
success = 1;
printf("###");
}
打印消息,但三个哈希(###)永远不打印? 为什么? 该程序似乎阻止了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);
to_read
是您希望读取的字节长度。 buf
有足够的空间。 每次读取后,相应地更新to_read
和buf
。 当然,您应该正确处理错误。
您现在必须停止从套接字读取,否则套接字将阻止您的程序,直到它收到更多数据。 如果您想知道如何创建不阻止程序的套接字,请查看非阻塞套接字。
ief2
尝试添加\\n
。 有时不打印非结束线。
编辑:哦等你意味着程序没有结束?
我猜你的while循环永远不会终止,因为读取成功或阻塞。
只有当n的值为零时,你的while循环才会结束。
你什么时候期望read返回零值? 您发送到此套接字的数据是否满足任何导致读取返回零的条件?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.