PDA

Просмотр полной версии : [Delphi]Winsock recv()


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

alamat
31.07.2008, 11:34
Такая проблем: при приеме данных если пакет заканчивается программа зависает ожидая окончания и так висит хоть до бесконечности. Пролопатил весь инет нашол тока решение для языка програмирования 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;