C编写和从套接字读取

时间:2013-03-15 18:00:31

标签: c sockets tcp

我必须在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 ......额外值来自哪里?

提前感谢您的回答,

2 个答案:

答案 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的结果是否与您发送的数据量完全相等。