[英]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.