Sorun :tcp portuna bir mesaj gönderiyoruz bize gelen bilgini boyutunu bilmiyoruz ve veriler bize parca parca geliyor. simdi tüm veriler geldiginden ve gelen bilgini bittigini nasıl anlarız.
not:IdTCPClient kullanılıyor.
TCP Client
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: TCP Client
Merhaba,
Gelen bilgi boyutu, gelen bilgi son karakter bilgisi, maksimum süre vb. ayırd edici bir bilgi olmadan gelen bilginin ilk bilgi paketi mi yoksa ikinci bilgi paketi mi olduğunu anlamanız maalesef mümkün değil.
Ne tür bir iletişim yapılıyor? Bir cihaz ile mi? Bir uygulama ile mi?
Gelen bilgi boyutu, gelen bilgi son karakter bilgisi, maksimum süre vb. ayırd edici bir bilgi olmadan gelen bilginin ilk bilgi paketi mi yoksa ikinci bilgi paketi mi olduğunu anlamanız maalesef mümkün değil.
Ne tür bir iletişim yapılıyor? Bir cihaz ile mi? Bir uygulama ile mi?
-
- Üye
- Mesajlar: 26
- Kayıt: 11 Tem 2014 11:13
Re: TCP Client
tcp naggle algorithm özelliğini false yapın öyle deneyin.
Garbage Collector, Delphi çöp üretmez çöpü bulup temizlemeye asla gerek yoktur...
Re: TCP Client
Ayrı bir thread içerisinde sürekli olarak IdTCPClient'in InputBuffer'ın boş olup olmadığını kontrol etmelisiniz. Tabi bu thread'e parametre olarak IdTCPClient'ı tanıtmalısınız. Aşağıdaki kabaca örneklemeye çalıştım.
Buradaki FClient, yukarıda bahsettiğim, parametrik olarak Thread'e tanıtılmış IdTCPClient'ır.
Kod: Tümünü seç
procedure TBirThread.Execute;
var
rxBuf: TIdBytes;
begin
while not Terminated do
begin
if FClient.IOHandler.InputBufferIsEmpty then
begin
FClient.IOHandler.CheckForDataOnSource(1000);
FClient.IOHandler.CheckForDisconnect;
if FClient.IOHandler.InputBufferIsEmpty then Continue;
end;
SetLength(rxBuf, 0);
FClient.IOHandler.InputBuffer.ExtractToBytes(rxBuf);
//...
end;
There's no place like 127.0.0.1