我有一個接收流股票價格數據的套接字。但是,我似乎收到了很多被截斷的消息,或者看起來被截斷的消息。這裏是我正在接收數據:套接字編程問題與recv()接收部分消息
if((numbytes = recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
perror("recv()");
exit(1);
}
else {
buf[numbytes] = '\0';
// Process data
}
可以recv()
得到公正的內容的部分消息被髮送?
我的感覺是我可能需要圍繞recv()
調用的另一個循環,直到發送完整的消息爲止。我知道,一個libcurl的實現我(不能使用的libcurl這裏我想)有一個外循環:
// Read the response (sum total bytes read in tot_bytes)
for(tot_bytes=0; ; tot_bytes += iolen)
{
wait_on_socket(sockfd, 1, 60000L);
res = curl_easy_recv(curl, buf + tot_bytes, sizeof_buf - tot_bytes, &iolen);
if(CURLE_OK != res) {
// printf("## %d", res);
break;
}
}
我需要類似的libcurl例如recv()
環路(即覈查的工作)?
不完全相關,但爲什麼你通過TCP發送刻度數據?這些東西通常是通過UDP進行組播的。 – chrisaycock 2012-04-20 17:26:51
我正在接收,不發送。他們只是給我發了一個主機名和一個端口號,我沒有得到任何其他的技術指導。我剛剛發了一封電子郵件詢問我是否應該使用UDP。但如果我使用TCP和它的工作原理(除了部分消息問題,我打開主題),它也可以使用UDP?即 - 他們發送UDP,我可以recv()與UDP或TCP?此外,他們發送標題,所以我想我需要使用這些來檢測部分消息,然後當我recv()下一次通過,偏移到部分消息,以嘗試並完成它.. thx。 –
2012-04-20 18:08:32
UDP的評論我沒有得到 - 如果你使用UDP,你可能會丟失數據,對吧? – 2012-04-23 22:21:40