为什么经常看到socket的recv函数一个一个字节的接收数据

anglesean10 2013-04-11 02:44:11
一起收不行吗? 我经常看到这种代码
char recvBuffer[1024];
char ch;
int i=0;
while(1)
{
int nLen = recv(sock,&ch,1,0);
if(nLen <= 0){
closesocket(sock);
break;
}
recvBuffer[i++] = ch;
}

为什么不直接写成
recv(sock,recvBuffer,1024,0);
closesocket(sock);
我直接指定收1024个字节, 即使是对方只发送一两个字节,它也会智能的断掉连接的啊?
...全文
458 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2013-04-12
  • 打赏
  • 举报
回复
引用 4 楼 Dobzhansky 的回复:
读一个, 太常见了, 只是从 os socket 实现的内部缓冲中读取, 碉堡了
正解,fread每次1字节完全正常,read每次1字节就是脑残了。
赵4老师 2013-04-12
  • 打赏
  • 举报
回复
引用 6 楼 anglesean10 的回复:
引用 3 楼 zhao4zhong1 的回复:不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html 大哥,换个台词行吗……
等你掉进去再爬出来的那一天!
pengliqing1113 2013-04-12
  • 打赏
  • 举报
回复
好像没有必要一个一个字节接收
小黑小宝 2013-04-12
  • 打赏
  • 举报
回复
无法参透代码作者的禅机。。。
sduxiaoxiang 2013-04-12
  • 打赏
  • 举报
回复
神奇的代码 实际敢这么用 会被玩死
m4a1sas 2013-04-11
  • 打赏
  • 举报
回复
呃...一个协议包头也要收好几次啊....
一桶姜山 2013-04-11
  • 打赏
  • 举报
回复
好奇为啥经常看到这种代码 收个长度头,再循环收是这样的吧
anglesean10 2013-04-11
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html
大哥,换个台词行吗? 我每提一个SOCKET的问题你就要这样回答一次,你的机器人不更新吗?
Dobzhansky 2013-04-11
  • 打赏
  • 举报
回复
比如, 基于文本的协议, 封装一个 readline.
Dobzhansky 2013-04-11
  • 打赏
  • 举报
回复
读一个, 太常见了, 只是从 os socket 实现的内部缓冲中读取, 碉堡了
赵4老师 2013-04-11
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html
starytx 2013-04-11
  • 打赏
  • 举报
回复
缓冲区的大小要合适,太小太大都不好,一个字节一个字节的真没见过
qq120848369 2013-04-11
  • 打赏
  • 举报
回复
脑残能干出这种事。

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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