TCP Client

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ekremkocak
Üye
Mesajlar: 24
Kayıt: 31 Oca 2015 03:24

TCP Client

Mesaj gönderen ekremkocak »

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.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: TCP Client

Mesaj gönderen ertank »

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?
ercan_elo_bil
Üye
Mesajlar: 26
Kayıt: 11 Tem 2014 11:13

Re: TCP Client

Mesaj gönderen ercan_elo_bil »

tcp naggle algorithm özelliğini false yapın öyle deneyin.
Garbage Collector, Delphi çöp üretmez çöpü bulup temizlemeye asla gerek yoktur... :D
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: TCP Client

Mesaj gönderen SimaWB »

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.

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;
Buradaki FClient, yukarıda bahsettiğim, parametrik olarak Thread'e tanıtılmış IdTCPClient'ır.
There's no place like 127.0.0.1
Cevapla