我用CSocket 编程下载某网页.
接收数据函数如下
CString MyReceive(CSocket *sock)
{   
CString str="";
int flag=0;
int num;
BYTE byte[26];
byte[25]='\0'; while(flag==0)
{
num=sock->Receive(byte,25);
if(num==SOCKET_ERROR)
{
MessageBox(NULL,"MyReceive error",NULL,MB_OK);
flag=1;
}
else
if(num>=0&&num<25)
{
flag=1;
byte[num]='\0';
str=str+byte;
}
else
if(num==25)
{
flag=0;
str=str+byte;
} }
return str;
}
意思是如果byte没有放满说明接收数据结束了.发现如果网页代码比较简单时,可以正常接收.如果网页比较复杂的时候只能接收到前面一部分.
因为数据包的问题,因为网页比较复杂,所以要分几个包包发送,而我的接收在byte没有放满的时候就结束了,其实这只是第一包.所以后续的没收到.我试着又调用一次这个函数,确实收到了后面的.但是如果有n个包.我又不可能调用n次函数.
有什么办法可以解决吗?(不使用异步,就使用csocket)谢谢了

解决方案 »

  1.   


    从CSoket继承,一般都这么干重写它的收到函数,当有数据到达时,收到函数会被调用
      

  2.   

    www.codeproject.com/internet偶一般用API。
      

  3.   

    我觉得使用解析比较好,毕竟对于网页不像简单的文件传输,可以用文件结束标志来判别~~
    可以根据网页的特殊的Tag来判断~~
    对于文件的话,看能不能通过首先获取下载的文件大小来作为判别的依据~~~