我正在尝试通过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);
}
}
答案 0 :(得分:2)
摆脱MSG_DONTWAIT。只有当套接字发送缓冲区已满并且无法发送数据时,您才能执行其他操作。由于您没有检查send()的结果,显然您对该条件不感兴趣。但是你必须检查发送的结果,因为你可能有错误,所以修复你的代码也是如此。