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.
TCP/IP Client/Server Not Connected hatası hakkında
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: TCP/IP Client/Server Not Connected hatası hakkında
Merhaba,
Hiç kod paylaşmamışsınız. Yardımcı olmak için sorunlu kodu görmek gerekir.
Hiç kod paylaşmamışsınız. Yardımcı olmak için sorunlu kodu görmek gerekir.
Re: TCP/IP Client/Server Not Connected hatası hakkında
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;
Re: TCP/IP Client/Server Not Connected hatası hakkında
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.
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.