我有一个接收流股票价格数据的套接字。但是,我似乎收到了很多被截断的消息,或者看起来被截断的消息。这里是我正在接收数据:套接字编程问题与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