使用Delphi的Socket组件进行阻塞方式通信的零碎

2016-08-22 10:16:18来源:http://525927.blog.51cto.com/515927/121280作者:xjfreeman人点击


首先重载TServerClientThread的ClientExecute方法:



procedure TMyThread.ClientExecute; begin repeat until...end; 在ServerSocket.OnGetThread中创建自己的线程: procedure ServerSocket1GetThread(...); begin MyThread := TMyThread.Create(False, ClientSocket); end;



当发生ServerSocket.ClientRread (or ClientWrite)时, 修改对应线程的Tserverclientthread.Data即可. 当然最好是让ServerClientThread自己主动调用TWinSocketThread操纵 ClinetSocket的读写. ThreadCache用来保存以创建的线程,这样当一个会话完成后,不是方对应线程, 而是留作以后使用,节省了时间,但耗费资源. ———————————————————————————————————————————————— 使用TServersocket.Socket的属性和方法 function GetClientThread(ClientSocket: TServerClientWinSocket): TServerClientThread; property ActiveConnections: Integer; property ActiveThreads: Integer; property Connections[Index: Integer]: TCustomWinSocket; property IdleThreads: Integer; 1.用GetClientThread函数区分不同ClientSocket的线程 2.上面获得线程的引用后,可以调用其suspend和resume方法 1.OnGetThread事件是在創建一個新連接線程之前觸發的,目的是可以允許用戶使用自己的 線程類(繼承自TServerClientThread),否則將使用默認的TServerClientThread線程類. 2.只要對Socket.ActiveConnection,Socket.Connections[ i]管理就可以了.例如:



for i:=0 to SrvSock.Socket.ActiveConnections-1 do if SendHost=SrvSock.Socket.Connections[ i].RemoteHost then begin SrvSock.Socket.Connections[ i].SendText(SendData); end;



3.線程是自動進行管理的. 若要直接對線程管理,需要記錄下所創建的線程.當然也是在 OnThreadStart,OnThreadEnd中. 或者想辦法引出TServerWinSocket中Private ActiveThreads: TList來使用.

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台