如何在客户端和服务器之间实现同步

时间:2012-02-02 09:07:35

标签: c sockets posix

我的服务器正在向客户端发送数据包,但第二个数据包未显示。 如果我的套接字是阻塞类型,我不知道为什么会发生这种情况。

     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);

1 个答案:

答案 0 :(得分:1)

这可能会发生,因为您的服务器正在发送一个空字符串。因此,您的客户端不会阻止,因为它收到了'\0'字符,并且它不会打印任何内容,因为它是一个空字符串。

第二个原因可能是因为您的服务器关闭了连接。在这种情况下,numbytes的值为零,并且您的客户端不会打印任何内容,因为您的缓冲区中也会出现空字符串。

您的代码存在的一个问题是,如果服务器发送1024字节或更多字节,numbytes将等于1024,如果您的缓冲区大小也是buf[numbytes],则表达式{{1}}将导致分段错误等于1024.您可以通过接收1023而不是1024来防止此问题。