recv函数怎么设置接收缓冲区的长度
答案:2 悬赏:10
解决时间 2021-03-02 21:15
- 提问者网友:白越
- 2021-03-02 10:07
recv函数怎么设置接收缓冲区的长度
最佳答案
- 二级知识专家网友:眠于流年
- 2021-03-02 11:29
1. 在执行recvfrom(socket,recvbuf,strlen(recvbuf),0,(SOCKADDR*)&addrFrom,&len);
2. 之前,recvbuf里面的值根本还不确定,strlen(recvbuf)怎么会计算得对呢.
2. 之前,recvbuf里面的值根本还不确定,strlen(recvbuf)怎么会计算得对呢.
全部回答
- 1楼网友:修女的自白
- 2021-03-02 11:53
不一定的。
tcp是流式套接字,你所面对的只是一个字符流。它只能保证各个字节按顺序到达,不会乱序。至于分几次,每次几个,说不准。
总而言这,tcp不是“面向消息”的。你如果需要基于消息的机制,只能自己制定应用层的协议(比如通过长度或者特殊的信息来标记消息的开始和结束),然后自己写代码进行封装。
假如send一次,是不是会有情况要recv两次才能收全?
recv的缓冲区足够大。
recv有返回值,为每次收到长度,
你收的时候,判断一下,有没有收全,
至于几次不好说,
tcp出错的话会重发的
tcp是不分包的
所以你得循环来收
最好加个长度
int ilen=50
int curlen=0;
while((curlen=recv(...,ilen))>0){
ilen-=curlen;
if(ilen<=0)
break;
}
tcp有可能粘包,所接受端要做分包处理。upd就不用了这样做了。
tcp有可能粘包,所接受端要做分包处理。udp就不用了这样做了
假如send一次,是不是会有情况要recv两次才能收全?
recv的缓冲区足够大。
会的。
也可能两次发的一次全收到。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯