Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Thread Socket (Yardım)
#1
İyi günler öncelikle 
Socketi Thread içerisinde kullanıyorum fakat thread çalışıyor ClientSocketde öyle bağlanıyor ama hemen arkasından sanırım thread ta kapanıyor Sockette yardımcı olabilecek varmı?
unit unit2;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, ScktComp;

type
 TClientSockThread = class(TThread)
 private
   fIp: string;
   fClientSocket: TClientSocket;
   procedure ClntConnect(Sender: TObject; Socket: TCustomWinSocket);
 protected
   procedure DoTerminate; override;
   procedure Execute; override;
   procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
   procedure ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket);

   property Clnt: TClientSocket read fClientSocket write fClientSocket;

 private
   FStream: TFileStream;

 public
   constructor Create(Ip: string);
 end;

 TForm2 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   procedure Button1Click(Sender: TObject);
 private

 public
   { Public declarations }
 end;

var
 Form2: TForm2;

implementation

{$R *.DFM}

procedure TClientSockThread.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
iLen: Integer;
Bfr: Pointer;
begin
     FStream := TFileStream.Create('C:\Users\hkesk\Desktop\XxXxXx\Win32\Debug\down\somine.mkv', fmCreate or fmShareDenyWrite);
     iLen := Socket.ReceiveLength;
     GetMem(Bfr, iLen);
         try
             Socket.ReceiveBuf(Bfr^, iLen);
             FStream.Write(Bfr^, iLen);
         finally
             FreeMem(Bfr);
         end;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
 i: Integer;
begin
   TClientSockThread.Create('127.0.0.1');
end;

{ TClientSockThread }

procedure TClientSockThread.ClntConnect(Sender: TObject; Socket:
 TCustomWinSocket);
begin
 //formdaki memo yada liste kutusuna baglı olanı ekle
 Form2.Memo1.Lines.Add(Socket.RemoteAddress+' | '+Socket.RemoteHost);
end;

constructor TClientSockThread.Create(Ip: string);
begin
 inherited Create(False);
 fIp := Ip;
 //thread kapanırken kendini sonlandırır.
 //bu ozellik bu gibi durumlarda cok ise yaramakta
FreeOnTerminate := True;
end;

procedure TClientSockThread.DoTerminate;
begin
 //thread sonlanırken clientsocket nesnesi yokedilir.
 fClientSocket.Free;
 inherited DoTerminate;
end;

procedure TClientSockThread.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket);
var
 I: Integer;
begin
   Form2.Memo1.Lines.Add('Çıktı..');
end;

procedure TClientSockThread.Execute;
begin
 //socket create edilir.
 fClientSocket := TClientSocket.Create(nil);

 with fClientSocket do
 try
   try
     Port := 5050;//herhangi bir portno
     ClientType := ctBlocking;//NonBlocking calısmıyor.
     Address := fIp;
     OnConnect := ClntConnect;//baglantı gerceklesince calısacak
     OnDisConnect := Clientsocket1DisConnect;
     onread:= ClientSocket1Read;
     Active := True;
   finally
     Active := False;
   end;
 except
   //baglı olmayan makinalar icin hata verecek
 end;
end;

end.
Cevapla


Bu Konudaki Yorumlar
Thread Socket (Yardım) - Yazar: hkeskin - 27-04-2020, Saat: 00:43
Cvp: Thread Socket (Yardım) - Yazar: delphiman - 11-07-2023, Saat: 12:47

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Edge Browser Hakkında Yardım. glagher 6 3.272 14-06-2025, Saat: 23:40
Son Yorum: maxpaynen
  Web servis konusunda yardım Patriot 7 1.407 24-01-2025, Saat: 21:28
Son Yorum: enigma
  Thread içinde Web Browser Çalışırmı adelphiforumz 0 433 09-01-2025, Saat: 13:22
Son Yorum: adelphiforumz
  Open cv Yardım woywod 0 430 30-12-2024, Saat: 01:50
Son Yorum: woywod
  Buton Oluşturma Konusunda Yardım İhtiyacı cemakkus 31 8.262 27-09-2024, Saat: 21:00
Son Yorum: cemakkus



Konuyu Okuyanlar: 1 Ziyaretçi