我的服务器正在向客户端发送数据包,但第二个数据包未显示。 如果我的套接字是阻塞类型,我不知道为什么会发生这种情况。
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);
答案 0 :(得分:1)
这可能会发生,因为您的服务器正在发送一个空字符串。因此,您的客户端不会阻止,因为它收到了'\0'
字符,并且它不会打印任何内容,因为它是一个空字符串。
第二个原因可能是因为您的服务器关闭了连接。在这种情况下,numbytes
的值为零,并且您的客户端不会打印任何内容,因为您的缓冲区中也会出现空字符串。
您的代码存在的一个问题是,如果服务器发送1024字节或更多字节,numbytes
将等于1024,如果您的缓冲区大小也是buf[numbytes]
,则表达式{{1}}将导致分段错误等于1024.您可以通过接收1023而不是1024来防止此问题。