关于Linux下socket编程传送字符的问题

zebra_zzh 2017-06-04 12:32:47
服务器向客户端传送一个字符数组char message[] = "hello world!";
为什么客户端显示收到了13个字符,难道结尾的/0也算一个吗,然后我进一步输出,发现传输过程中有错误,次数也超过了12,求解:
服务器:

char message[] = "Hello World!";
...
write(clnt_sock,message,sizeof(message));

客户端:

char message[30];
...
while(read_len = read(sock,&message[idx++],1))
{
if(read_len == -1)
error_handing("read() error\n");
printf("%s *",message);
printf("\n");
str_len += read_len;
}
printf("Message from server:%s \n",message);
printf("finction read call count:%d \n",str_len);


显示结果
...全文
376 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-06-06
  • 打赏
  • 举报
回复
原因是你发了13个字符,sizeof是计算数组的字节数,字符串"hello world!";算上'\0'正好是13个字节。若是用strlen(message);那么发送的就是12个字节。 对端发送多少个字节,正常情况下就接收多少个字节。
萨摩耶smy 2017-06-06
  • 打赏
  • 举报
回复
这个地方是不是涉及tcp分包的概念哦
偷学者 2017-06-05
  • 打赏
  • 举报
回复
sizeof(message) 不是等于 13 嘛
赵4老师 2017-06-05
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545
zhujinqiang 2017-06-05
  • 打赏
  • 举报
回复
看上去是read函数里是判断字符是‘/0’作为接收结束标志的。 第十三个字符是‘/0’
zebra_zzh 2017-06-05
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545
已经解决,第十三个字符是‘/0’,但传输过程中出现了错误, 它也是在while循环里输出的为什么不包含次数,他一共打印了15行,count就应该是15啊?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧