我必须在c中使用tcp套接字发送两个字节。
到目前为止我的尝试:
static void send_request(int sockfd) {
uint8_t buffer[SEND_BYTES];
uint8_t requestLowByte = 0;
uint8_t requestHighByte = 0;
.... calculating the values for the two bytes
bzero(buffer,SEND_BYTES);
buffer[0] = requestLowByte;
buffer[1] = requestHighByte;
connfd = write(sockfd, buffer, strlen(buffer));
if (connfd < 0) {
bail_out(EXIT_FAILURE, "ERROR writing to socket\n", progname);
}
}
我的测试值: 我试图将循环中的值248和127发送到服务器。 在服务器端,我收到了:248 127,7 248,127 7,7 7,7 7,248 127 ......额外值来自哪里?
提前感谢您的回答,
答案 0 :(得分:3)
这一行:
connfd = write(sockfd, buffer, strlen(buffer));
应该是:
connfd = write(sockfd, buffer, SEND_BYTES);
strlen
函数正在寻找一个\0
来计算缓冲区的长度,因为你不确定在数组中的第二个值之后有\0
发送,那里有未定义的行为。
答案 1 :(得分:0)
什么是SEND_BYTES
? 2?如果是,则strlen
无效,因为终止零被requestHighByte
覆盖。要么SEND_BYTES
&gt; 2或使用sizeof(buffer)
确定字节数。
此外,您可能想要检查write
的结果是否与您发送的数据量完全相等。