简单问题,csocket的send函数

macrogu 2003-10-21 10:44:14
csocket的send函数buffer大小有没有限制,我一次发送一个接近1M的CString字符串也没有问题,但好像听说buffer大小不能超过ip包的最大值,是不是应该分成几k分几次发送???或者是因为csocket是阻塞的,不管buffer多大,他都会直到发送完成后返回。
...全文
62 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
CounterHack 2003-10-22
  • 打赏
  • 举报
回复
对于send(),系统可以给你拆包,但Recv()就只能你自己组装了.
while((int nCount = Recv(buf,len)) < 0)
{
//处理数据。
}
fbmsf 2003-10-21
  • 打赏
  • 举报
回复
分割你的buffer,作成 ip包是由你的下层程序来实现的。你是不用管的,但是最好不要一次发的太多。一般send可以发一次就成功,关键是recv,它不是执行一次就按你要得到的字节数来给你的。比如你要recv,1024字节,但它就可以只返回726字节 所以,recv有时要递归来接收,直到得到你想要的字节数为止。
windows_editor 2003-10-21
  • 打赏
  • 举报
回复
你应该对send函数进行改进 以保证每次都发送完全

int xSend(SOCKET sock, void *buf, int len)
{
int byte_left, byte_send, byte_sum;
u_char *p;

byte_left = len;
p = buf;
byte_sum = 0;
while(byte_left > 0) {
byte_send = send(sock, p, byte_left, 0);
if(byte_send < 0) {
perror("writing socket");
return(-1);
}
else if(byte_send == 0 ){
break;
}
byte_sum += byte_send;
byte_left = byte_left - byte_send;
p = p + byte_send;
}

if(byte_sum != len){
return -1;
}
else{
return 0;
}
}
bbyf 2003-10-21
  • 打赏
  • 举报
回复
关注!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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