RECV接收问题!!!!!!!!!

AaronChan 2003-09-05 04:54:47
从服务器取数据,这个数据动态的,有可能很大,怎样才可以把这个数据全部接收完??接收缓冲区定义得很大感觉不是很好!
Recv(………………………………);
...全文
63 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohyy 2003-09-07
  • 打赏
  • 举报
回复
《windows网络编程》第2版 第5章,讲述的很详细。。建议去看看
AaronChan 2003-09-07
  • 打赏
  • 举报
回复
我是先向服务器提交申请,然后服务器返回数据,所以数据包的格式是不能由我控制的。
SELECT模型谁给个例子看看,我测试的时候SELECT()返回总是0,有问题!!!
用循环好吗?我接收完数据就要把SOCKET关闭的。
wkgenius 2003-09-06
  • 打赏
  • 举报
回复
服务器端先把数据的大小发送给客户端,比如说这个大小为dwSize,那么,接下来接收数据。
char buf[2048];
int n = 0;

while(dwSize>0)
{
n=recv(s,buf,2048);
dwSize -= n;
将收到的数据写到一个文件里;
}

wkgenius 2003-09-06
  • 打赏
  • 举报
回复
服务器端先把数据的大小发送给客户端,比如说这个大小为dwSize,那么,接下来接收数据。
char buf[2048];
int n = 0;

while(dwSize>0)
{
n=recv(s,buf,2048);
dwSize -= n;
将收到的数据写到一个文件里;
}

ProgrameMan 2003-09-06
  • 打赏
  • 举报
回复
char buf[1024];
int n = 0;

while(TRUE)
{
n = recv(s,buf,sizeof(buf))
if (n<=0 ) break;
// 下面保存接收到的数据
}



redby 2003-09-06
  • 打赏
  • 举报
回复
建议你:
一般发送数据包括两个部分:包头和包体,
1包头:用来描述包体的长度(用时包括标识包体的类型)等信息
2包体:在收到报头后,可根据包头所描述的包体长度去接收定长的包体。(如果一次接收不满,可循环接收,直到接收到定长的数据包)
3缓冲区:你可以动态的分配缓冲区,也可以耕具你目前的数据流量来定义最小的满足应用的
缓冲区大小,大点也无所谓,一般十万个字节没问题。
IThurricane 2003-09-06
  • 打赏
  • 举报
回复
int send = 0;
while(send<sizeof(MMM))
{
int nCharSend=send(m_hSocket,(char*)(&SendBag+send),sizeof(MMM)-send,0);
send+=nCharSend;
}
xiaohyy 2003-09-05
  • 打赏
  • 举报
回复
缓冲区通常不要超过4k,以免系统换页,定义为1024就比较合适。。

循环读,直到没有数据为止,

通常在recv时,采用select模型,设置一个超时时间。。

18,356

社区成员

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

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