C-从套接字写入和读取
我必须使用c中的tcp套接字发送两个字节 我迄今为止的努力: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
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
,因此它的行为是未定义的