Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [Delphi]Winsock recv() (https://forum.antichat.xyz/showthread.php?t=79165)

F1kus 31.07.2008 10:51

[Delphi]Winsock recv()
 
Такая проблем: при приеме данных если пакет заканчивается программа зависает ожидая окончания и так висит хоть до бесконечности. Пролопатил весь инет нашол тока решение для языка програмирования Kylix и c++ а для дельфи готовых решений нет да и по поводу этого мысслей нету.
Помогите пожалуйста решить проблему.
Зарание спасибо!

alamat 31.07.2008 11:34

Цитата:

Сообщение от F1kus
Такая проблем: при приеме данных если пакет заканчивается программа зависает ожидая окончания и так висит хоть до бесконечности. Пролопатил весь инет нашол тока решение для языка програмирования Kylix и c++ а для дельфи готовых решений нет да и по поводу этого мысслей нету.
Помогите пожалуйста решить проблему.
Зарание спасибо!

Делается все просто :)
Код:

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;



Время: 14:55