您的位置:首页 > 编程语言 > Delphi

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

2008-12-20 01:06 796 查看
首先重载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
來使用.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 Delphi 组件