while true do
  begin
     len:= recv(FSocket, buf, sizeof(buf), 0); //接收数据
     if len<1 then break;
    SetString(str,buf,len);
  end;用winsock读取网页的源代码,上面这么写只能接收到header的数据,请问返回的content要如何接收,谢谢。

解决方案 »

  1.   

    function StartNet(var sock: integer): Boolean;
    var
      wsadata: Twsadata;
      Fsocket,err: integer;
      SockAddrIn: TSockAddrIn;
    begin
      WSAStartup($0101,wsadata);
      Fsocket := socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
      if FSocket = invalid_socket then
      begin
        Result := False;
        Exit;
      end;
      SockAddrIn.sin_addr.s_addr := HostNameToIP('www.kaixin001.com');
      SockAddrIn.sin_family := PF_INET;
      SockAddrIn.sin_port := htons(80);
      err := connect(FSocket, SockAddrIn, SizeOf(SockAddrIn));
      if err = 0 then
      begin
        sock := FSocket;
        Result := True;
      end
      else
        Result := False;
    end;procedure StopNet(Fsocket: integer);
    begin
      closesocket(Fsocket);
      WSACleanup;
    end;function SendData(FSocket: integer;SendStr: string): integer;
    var
      err: integer;
    begin
      err := send(FSocket,pchar(sendstr)^, length(sendstr), 0);
      Result := err;
    end;function HostNameToIP(S: string): DWord;
    var
      Host: pHostent;
      Address: DWord;
    begin
      Address := inet_addr(PChar(S));
      if (Address = INADDR_NONE) then begin
        Host := GetHostByName(Pchar(S));
        if Host = nil then begin
          HostNameToIP := INADDR_NONE;
          exit;
        end
        else begin
          hostNametoip := longint(pointer(Host^.h_addr_list^)^);
          exit;
        end;
      end
      else begin
        Address := inet_addr(PChar(S));
        HostNameToIP := Address;
        exit;
      end;
    end;
    procedure TForm1.FlatButton2Click(Sender: TObject);
    var
      re,Fsocket,Checkit,snum,enum: integer;
      Login,Login1,User,Pass,str,data: string;
      BufRecv: array[0..1023]of char;
    begin
      Login:= 'GET /app/app.php HTTP/1.1'+#13#10;
      Login:= Login+'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-excel, */*'+#13#10;
      Login:= Login+'Referer: http://www.kaixin001.com/home/'+#13#10;
      Login:= Login+'Accept-Language: zh-cn'+#13#10;
      Login:= Login+'Content-Type: application/x-www-form-urlencoded'#13#10;
      Login:= Login+'Accept-Encoding: gzip, deflate'+#13#10;
      Login:= Login+'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTJA-E.T.(QinDaHai); .NET CLR 2.0.50727)'+#13#10;
      Login:= Login+'Host: www.1111.com'+#13#10;
      Login:= Login+'Content-Length: '+inttostr(length(Login1))+#13#10;
      Login:= Login+'Connection: Keep-Alive'+#13#10;
      Login:= Login+'Cookie: _user='+Cuser+';_email='+Cemail+'; _invisible=0; SERVERID=_srv73_'#13#10#13#10;
      StartNet(Fsocket);
      Senddata(Fsocket,Login);
      while true do
      begin
         re:= recv(Fsocket,bufrecv,sizeof(bufrecv),0);
         if re<1 then break;
         SetString(str,bufrecv,re);
         data:= data + str;
      end;
      //if length(data)>100 then FlatEdit1.Text:= data;
      FlatMemo1.Text:= data;
      StopNet(Fsocket);不好意思,还有要是data的数据是utf8怎样转换,
      

  2.   

      GetMem(BufRecv, 1024);
      while true do
      begin
        ZeroMemory(bufRecv, 1024);
        re := recv(FSocket, BufRecv^, 1024, 0);
        str := StrPas(bufRecv);
        data:= data+str;
        if re <> 1024 then break;
      end;
      FreeMem(BufRecv);已解决,