TCP/IP Client/Server Not Connected hatası hakkında

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
enesharun
Üye
Mesajlar: 28
Kayıt: 17 Eki 2014 11:46

TCP/IP Client/Server Not Connected hatası hakkında

Mesaj gönderen enesharun »

Merhabalar arkadaşlar,

Delphi XE'de yazdığım bir uygulama var client ve server olarak çalışıyor. Mantık şu şekilde: Form açılıyor butona tıklıyor ve server'a bağlanıyor. Bir problem yok. Server işlemi yapıyor client'e sonuç gönderiyor ve client sonucu başarılı şekilde alıyor. Sorun yok. Fakat form kapandığında "EIdNotConnected with message 'Not Connected'" hatası veriyor.

Yardımcı olabilir misiniz? Component : IdTCPClient / IdTCPServer

İyi çalışmalar.
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: TCP/IP Client/Server Not Connected hatası hakkında

Mesaj gönderen ertank »

Merhaba,
Hiç kod paylaşmamışsınız. Yardımcı olmak için sorunlu kodu görmek gerekir.
enesharun
Üye
Mesajlar: 28
Kayıt: 17 Eki 2014 11:46

Re: TCP/IP Client/Server Not Connected hatası hakkında

Mesaj gönderen enesharun »

Selamlar, haklısınız.

Kod: Tümünü seç

// ... TIdTCPClient
  idTCPClient: TIdTCPClient;

  // ... TIdThreadComponent
  idThreadComponent: TIdThreadComponent;
  
  
procedure TForm1.IdThreadComponentRun(Sender: TIdThreadComponent);
var
  msgFromServer: string;
begin
  if IdTCPClient.IOHandler.Connected = True then
  begin
    // ... read message from server
    msgFromServer := IdTCPClient.IOHandler.ReadLn();
    // ... messages log
    Display('SERVER', msgFromServer);
  end;
end;

procedure TForm1.IdTCPClientConnected(Sender: TObject);
begin
  // ... messages log
  Display('CLIENT', 'CONNECTED!');

  // ... after connection is ok, run the Thread ... waiting messages from server
  IdThreadComponent.Active := True;
end;

procedure TForm1.Display(p_sender: String; p_message: string);
begin
  TThread.Queue(nil, procedure begin sonuc := p_message; if sonuc = '1' then begin Islemler; end; end);
end;

procedure TForm1.pnlButtonClick(Sender: TObject);
begin
try
    if IdTCPClient.Connected = false then
    begin
      IdTCPClient.Connect;
    end;
  except
    on E: Exception do
    begin
      Display('CLIENT', 'BAĞLANTI HATASI! ' + E.Message);
    end;
  end;

  IdTCPClient.IOHandler.WriteLn(IngenicoJson);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    try
      if Action = caFree then
      begin
        if IdTCPClient.Connected=true then
        begin
          IdTCPClient.Disconnect;
        end;
      end;
    except
    end;
end;
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: TCP/IP Client/Server Not Connected hatası hakkında

Mesaj gönderen ertank »

Thread çalıştırıyorsunuz.
Form kapanması sırasında önce Thread'i durdurup ardından disconnect olmalısınız. Yoksa thread sürekli veri okumaya çalışıyor olacaktır.
Form kapanması sırasında ihtimal sunucudan bilgi gelir ise ReadLn() kısmında hata alırsınız çünkü o esnada Client Disconnect olmaya çalışıyor olur ve ReadLn işlemini iptal eder. Bu yüzden ReadLn satırını try..except içine almanız gerekebilir.

Aldığınız hata sadece IDE içinde mi oluşuyor? EXE tek başına haricen çalıştığında hata mesajı kullanıcıya gösteriliyor mu? Kullanıcı görmüyor ise işleyişe özel bir durum olup gözardı etmeniz de mümkün.
Cevapla