[Delphi]Winsock recv()

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by F1kus, 31 Jul 2008.

Thread Status:
Not open for further replies.
  1. F1kus

    F1kus Member

    Joined:
    3 Jan 2007
    Messages:
    0
    Likes Received:
    5
    Reputations:
    0
    Такая проблем: при приеме данных если пакет заканчивается программа зависает ожидая окончания и так висит хоть до бесконечности. Пролопатил весь инет нашол тока решение для языка програмирования Kylix и c++ а для дельфи готовых решений нет да и по поводу этого мысслей нету.
    Помогите пожалуйста решить проблему.
    Зарание спасибо!
     
    1 person likes this.
  2. alamat

    alamat Elder - Старейшина

    Joined:
    6 Aug 2007
    Messages:
    18
    Likes Received:
    3
    Reputations:
    0
    Делается все просто :)
    Code:
    CONST
    
    GP_TIMEOUT=10000;
    
    .....
    
    function recvdata(sock:TSocket):string;
    var
      tv : timeval;
      fds : TFDSet;
      buf : array [1..1024] of char;
      res : string;
      r : integer;
      i:integer;
      inc,tmp:integer;
    begin
      r:=1;
      while (r>0) do
      begin
        FD_ZERO(fds);
        FD_SET(sock, fds);
        tv.tv_sec := GP_TIMEOUT div 1000;
        tv.tv_usec := (GP_TIMEOUT mod 1000) * 1000;
        i := select(0, @fds, nil, nil, @tv);
        if (i <= 0) then
        begin
          break;
        end;
        r := recv(sock, buf, 1024, 0);
        res:=res+copy(buf,1,r);
      end;
      result:=res;
    end;
    
     
    1 person likes this.
Thread Status:
Not open for further replies.