TCP Client

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

TCP Client

Mesaj gönderen ekremkocak » 15 Eki 2017 10:20

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
Üye
Mesajlar: 966
Kayıt: 11 Eyl 2015 11:45

Re: TCP Client

Mesaj gönderen ertank » 15 Eki 2017 03:55

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: 14
Kayıt: 11 Tem 2014 10:13

Re: TCP Client

Mesaj gönderen ercan_elo_bil » 03 Oca 2018 10:36

tcp naggle algorithm özelliğini false yapın öyle deneyin.

Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1286
Kayıt: 07 May 2009 09:42
Konum: İstanbul
İletişim:

Re: TCP Client

Mesaj gönderen SimaWB » 03 Oca 2018 05:12

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