0

我必须使用 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 ... 额外的值从何而来?

提前感谢您的回答,

4

2 回答 2

3

这一行:

connfd = write(sockfd, buffer, strlen(buffer));

应该:

connfd = write(sockfd, buffer, SEND_BYTES);

strlen函数正在寻找 a\0来计算缓冲区的长度,并且由于您不确定\0要发送的数组中的第二个值之后是否存在 a,因此它是未定义的行为。

于 2013-03-15T18:05:49.813 回答
0

是什么SEND_BYTES?2?如果是,则strlen无法正常工作,因为终止零被requestHighByte. make SEND_BYTES> 2 或用于sizeof(buffer)确定字节数。

此外,您可能需要检查结果是否write完全等于您发送的数据量。

于 2013-03-15T18:05:26.860 回答