C-从套接字写入和读取

C-从套接字写入和读取,c,sockets,tcp,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); b

我必须使用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);
    }
}
静态无效发送请求(int-sockfd){
uint8_t缓冲区[发送字节];
uint8_t requestLowByte=0;
uint8_t requestHighByte=0;
..计算两个字节的值
bzero(缓冲区,发送字节);
缓冲区[0]=requestLowByte;
缓冲区[1]=requestHighByte;
connfd=写入(sockfd,buffer,strlen(buffer));
如果(connfd<0){
退出(退出失败,“写入套接字错误”,progname);
}
}
我的测试值: 我尝试将值248和127以循环方式发送到服务器。 在服务器端,我收到了:248127,72481277,777248127。。。额外的值从何而来


提前感谢您的回答,

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


此外,您可能需要检查
写入的结果是否与您正在发送的数据量完全相同。

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

此外,您可能需要检查写入的结果是否与您发送的数据量完全相同。

此行:

connfd = write(sockfd, buffer, strlen(buffer));
应该是:

connfd = write(sockfd, buffer, SEND_BYTES);
strlen
函数正在寻找一个
\0
来计算缓冲区的长度,由于您不能确保在要发送的数组中的第二个值之后有一个
\0
,因此这是一个未定义的行为。

此行:

connfd = write(sockfd, buffer, strlen(buffer));
应该是:

connfd = write(sockfd, buffer, SEND_BYTES);
strlen
函数正在寻找一个
\0
来计算缓冲区的长度,由于您不能确保在要发送的数组中的第二个值之后有一个
\0
,因此它的行为是未定义的