我必须在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发送到服务器。在服务器端,我收到了:248127,7248,1277,77,77,248127 ...额外的值从何而来?
提前感谢你的回答,
发布于 2013-03-16 02:05:50
这一行:
connfd = write(sockfd, buffer, strlen(buffer));应该是:
connfd = write(sockfd, buffer, SEND_BYTES);strlen函数正在寻找一个\0来计算缓冲区的长度,由于您不能确保在数组中的第二个值之后有一个要发送的\0,因此它在那里是未定义的行为。
发布于 2013-03-16 02:05:27
什么是SEND_BYTES?2?如果是,则strlen不能正常工作,因为requestHighByte会覆盖终止零。或者使SEND_BYTES >2,或者使用sizeof(buffer)来确定字节数。
此外,您可能希望检查write的结果是否与您发送的数据量完全相等。
https://stackoverflow.com/questions/15439195
复制相似问题