使用Delphi的Socket组件进行阻塞方式通信的零碎
2008-12-20 01:06
796 查看
首先重载TServerClientThread的ClientExecute方法:
当发生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]管理就可以了.例如:
3.線程是自動進行管理的. 若要直接對線程管理,需要記錄下所創建的線程.當然也是在
OnThreadStart,OnThreadEnd中. 或者想辦法引出TServerWinSocket中Private ActiveThreads: TList
來使用.
procedure TMyThread.ClientExecute; begin repeat until... end; 在ServerSocket.OnGetThread中创建自己的线程: procedure ServerSocket1GetThread(...); begin MyThread := TMyThread.Create(False, ClientSocket); end; |
修改对应线程的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; |
OnThreadStart,OnThreadEnd中. 或者想辦法引出TServerWinSocket中Private ActiveThreads: TList
來使用.
相关文章推荐
- java中使用socket进行udp方式通信时拔掉网线会导致send()方法阻塞
- 在Silverlight中使用Socket进行通信(1)Socket"请求-回复"方式的简易数据交换
- 在Silverlight中使用Socket进行通信(1)Socket"请求-回复"方式的简易数据交换
- Java UDP使用Socket进行网络通信(0)
- JAVA系列课程讲座一:使用Socket通信实现网络通信程序(TCP方式)
- 使用reflux进行react组件之间的通信
- 使用TCP/IP的套接字(Socket)进行通信
- 使用Socket进行通信(Android)
- Flex与java进行socket通信完成以断点续传方式的文件上传
- 使用NIO实现非阻塞Socket通信原理
- Swift - 使用socket进行通信(附聊天室样例)
- Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信
- Android程序:使用HttpClient进行Get方式通信
- 敏捷思维学习Ext.Net MVC--3.8Form表单组件之使用Enum升级复选组件组(CheckboxGroup)暨前后台终极通信方式
- socket上http协议应用(使用socket进行http通信的例子,准备好报头以后,简单read/write就可以了)
- HttpClient-----3、使用HttpClient进行GET方式通信
- java 使用Socket进行通信
- 使用Socket进行通信
- 使用NIO实现非阻塞Socket通信
- 逐步教你使用.net进行Socket通信进阶篇