Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];




Вниз

Sockety 


KPOT   (2002-01-22 14:06) [0]

Pishu malen"kuju programmku s Socketami, niznaju kak pral"na dejstvovat" v takoj situacii:

inogda na onReceive Socket.ReceiveLength bol"she chem vozvrachaemoje znachenie Socket.ReceiveBuf. Ja tak ponimaju chto znachit prislali mne bol"she chem ja s4ital :((

Kak i kogda ja mogu s4itat" ostatok ???

Zaranee blagodaren



Digitman   (2002-01-22 14:31) [1]

см.
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1004708960&n=4



KPOT   (2002-01-22 17:09) [2]

Spasibo za otvet.
Ja toge tak nadejalsja chto pridet eche, no :(

Esli ne trudno, to gljan" plz.

U menja takoj obrabotchik :

procedure TForm2.Sock2Read(Sender: TObject; Socket: TCustomWinSocket);
var
j, n, i, rc, h, h1, h2 : integer;
buf : PChar;
ss: TClientSocket;
begin
// s interneta
h := Socket.Handle;
inc( inCount );
h1 := inCount;

Memo1.Lines.Add("Sock2Read :" + inttostr(Socket.Handle) + " :" + inttostr(h1));
h2 := Socket.ReceiveLength;
GetMem(buf,h2+1);
n := Socket.ReceiveBuf(buf^,h2 );
Memo1.Lines.Add(" Sock2Read : in :" + inttostr(h2) + " received :" + inttostr(n));
if n > 0 then begin
form2.Edit3.text := inttostr( strtoint(form2.Edit3.text) + n);
for j := 1 to actConn do begin
i := ConnUsed[j];
if Sender = TObject( aConn[ i, 2 ] ) then begin
ss := aConn[ i, 1 ];

repeat
rc := ss.Socket.SendBuf(buf^, n);
until rc <> -1 ;
form2.Edit4.text := inttostr( strtoint(form2.Edit4.text) + rc);
break;
end;
end;
end ;
FreeMem(buf);
end;

i v Memo popadaet takoj log:

....
....
Sock2Read :329452 :690
Sock2Read : in :8192 received :3736
Sock2Read :329452 :691
Sock2Read : in :8192 received :8192
Sock2Read :329452 :692
Sock2Read : in :8192 received :5592
Sock2Disconnect :329452



Digitman   (2002-01-22 17:31) [3]

Читай хэлп. Он для тебя написан Борландом.
Вот что по этому поводу там есть:

" Note: While the ReceiveLength method can return an estimate of the size of buffer required to retrieve information from the socket, the number of bytes it returns is not necessarily accurate."

Это значит, что лог твой правильно отражает происходящее в системе : сколько байт реально прочитано вызовом ReceiveBuf(), столько и стоит считать достоверно переданными и полученными принимающей стороной. Здесь важно, что реально прочитанное из гнездового буфера в тек.событии число байт не больше заявленного системой в ReceiveLength()




Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.026 c
1-9544            snoup                 2002-03-23 20:12  2002.04.04  
Как вызвать из панели управления например аплер Модемы ?


1-9434            LiNkS                 2002-03-25 09:06  2002.04.04  
Перетаскивание формы


1-9438            Sound                 2002-03-22 21:58  2002.04.04  
Есть ли в ListBox событие похожее на onChange?


1-9474            Varg                  2002-03-25 17:07  2002.04.04  
Как передать значения параметров в др. процедуру?


4-9679            Ditrix                2002-02-05 06:49  2002.04.04  
CreateProcessWithLogonW -> Error 87 InvalidParameters???????