0

我正在尝试通过 tcp 发送一个小数据包,但我对它的大小有疑问。我的数据是 255 字节缓冲区:

buffer[0] = 0x00;
buffer[1] = 0x04;
buffer[2] = 0x06;
buffer[3] = 0x08;
buffer[4] = 0x01;
buffer[5] = 0x01;

我用

send(sockfd,buffer,6,MSG_NOSIGNAL|MSG_DONTWAIT); 

但是当我使用 6 时无法发送数据。如果我使用发送如下:

 send(sockfd,buffer,sizeof(buffer),MSG_NOSIGNAL|MSG_DONTWAIT);  

然后发送数据,但接收方必须解析额外的 250 0x00 字节,我不想要它。为什么6不行。我也随机尝试 10 次,没有任何变化。

这是我的接收器代码任何东西都写在那一边:

        while(1) {
           ret = recv(socket,buffer,sizeof(buffer),0);
           if (ret > 0) 
                 printf("recv success");
            else
            {
               if (ret == 0)
                   printf("recv failed (orderly shutdown)");
               else
                   printf("recv failed (errno:%d)",errno);
            }
        }
4

1 回答 1

2

摆脱 MSG_DONTWAIT。这仅在套接字发送缓冲区已满且无法发送数据时有其他事情要做时才有用。由于您没有检查 send() 的结果,显然您对该条件不感兴趣。但是,无论如何您都必须检查发送的结果,因为您可能遇到了错误,因此请修复您的代码以执行此操作。

于 2012-11-07T22:17:20.637 回答