【发布时间】:2012-02-02 09:07:34
【问题描述】:
我的服务器正在向客户端发送数据包,但没有显示第二个数据包。 如果我的套接字是阻塞类型的,我不知道为什么会发生这种情况。
while(1){
memset(buf,0,1024);
numbytes=0;
if ((numbytes = recv(sockfd, buf, 1024, 0)) == -1) {
perror("recv");
exit(1);
}
buf[numbytes] = '\0';
printf("%s\n",buf);
fflush(stdout);
}
fclose(fp);
close(sockfd);
【问题讨论】:
-
你是什么意思尝试接收两次?你能澄清你的问题吗?
-
Wireshark 是一个方便的工具,可以在这些情况下为您提供帮助
-
这意味着 while 循环正在迭代两次,第一次我得到了我从服务器发送的数据,第二次它唯一的,null 但据我说它应该阻止并等待数据来自服务器端。
-
第二次运行中的
numbytes是什么?也许将printf("%s\n",buf);替换为printf("%d %s\n", numbytes, buf);。此外,如果您限制对0..numbytes的访问,则不需要memset(buf,0,1024);。还有其他缺陷...... -
有几件事: 1,循环是无限的,你永远不会打破它。 2、你不检查关闭的连接(
numbytes == 0)。 3、对recv的调用将返回一旦数据被复制到缓冲区,即使它只是一个字节。