首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C -writing和从套接字读取

C -writing和从套接字读取
EN

Stack Overflow用户
提问于 2013-03-16 02:00:31
回答 2查看 87关注 0票数 0

我必须在c中使用tcp套接字发送两个字节。

到目前为止我的尝试是:

代码语言:javascript
复制
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 ...额外的值从何而来?

提前感谢你的回答,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-16 02:05:50

这一行:

代码语言:javascript
复制
connfd = write(sockfd, buffer, strlen(buffer));

应该是:

代码语言:javascript
复制
connfd = write(sockfd, buffer, SEND_BYTES);

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

票数 3
EN

Stack Overflow用户

发布于 2013-03-16 02:05:27

什么是SEND_BYTES?2?如果是,则strlen不能正常工作,因为requestHighByte会覆盖终止零。或者使SEND_BYTES >2,或者使用sizeof(buffer)来确定字节数。

此外,您可能希望检查write的结果是否与您发送的数据量完全相等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15439195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档