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



首先重载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事件是在��建一��新�B接�程之前�|�l的,目的是可以允�S用�羰褂米约旱�
�程�(�^承自TServerClientThread),否�t�⑹褂媚��J的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.�程是自�舆M行管理的. 若要直接���程管理,需要��下所��建的�程.��然也是在
OnThreadStart,OnThreadEnd中. 或者想�k法引出TServerWinSocket中Private ActiveThreads: TList
�硎褂茫�

你可能感兴趣的:(socket,组件,职场,Delphi,休闲)