tcp以其实际长度发送而不是使用sizeof数据

时间:2012-11-07 14:37:12

标签: networking tcp sizeof tcp-ip

我正在尝试通过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);
            }
        }

1 个答案:

答案 0 :(得分:2)

摆脱MSG_DONTWAIT。只有当套接字发送缓冲区已满并且无法发送数据时,您才能执行其他操作。由于您没有检查send()的结果,显然您对该条件不感兴趣。但是你必须检查发送的结果,因为你可能有错误,所以修复你的代码也是如此。