İ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ı?
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.