欢迎来到天天文库
浏览记录
ID:37919513
大小:65.50 KB
页数:18页
时间:2019-06-02
《DELPHI中完成端口(摘自掰掰开发)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、DELPHI中完成端口(IOCP)的简单分析出自掰掰开发-http://www.88dev.com/用DELPHI开发网络代码已经有一段时间了!我发现在网上用VC来实现完成端口(IOCP)的代码很多,但是使用DELPHI来实现的就比较少了。对IOCP讲的清楚的就更少了。在这里我把自己编写DELPHI下的IOCP写出来,希望对刚学完成端口的朋友有个帮助。首先我们来了解一些在使用IOCP的时候需要使用的一些结构!(1):单IO数据结构 LPVOID=Pointer; LPPER_IO_OPERATION_DATA=^PER_IO_OPERATION_DATA; PER_IO
2、_OPERATION_DATA=packedrecord Overlapped:OVERLAPPED; DataBuf:TWSABUF; Buffer:array[0..1024]ofCHAR; BytesSEND:DWORD; BytesRECV:DWORD; end;上面的结构中Overlapped:OVERLAPPED;和DataBuf:TWSABUF;是固定的结构类型。Buffer:array[0..1024]ofCHAR;是用来保存接受数据的缓存。BytesSEND:DWORD;用来标志发送数据的长度。BytesRECV:DWORD;用来标志接受数据的长
3、度。因为完成端口的工作者线程可以接受到来自客户端的数据,同时还可以接受到自己发送给客户端的数据,所以我们使用BytesSEND,BytesRECV变量来说是用来区分这次的数据是来自客户端的数据还是自己发送出去的数据。详细的使用方法,我会在下面详细说明。(2):“单句柄数据结构” LPPER_HANDLE_DATA=^PER_HANDLE_DATA; PER_HANDLE_DATA=packedrecord Socket:TSocket; end;下来我从编写一个完成端口的为例说明。ifWSAStartUp($202,wsData)<>0thenbegin WSACl
4、eanup();end;加载SOCKET。我使用的是2.2版为了后面方便加入心跳。CompletionPort:=CreateIOCompletionPort(INVALID_HANDLE_VALUE,0,0,0);创建一个完成端口。GetSystemInfo(LocalSI);forI:=0toLocalSI.dwNumberOfProcessors*2-1dobegin hThread:=CreateThread(nil,0,@ServerWorkerThread,DELPHI中完成端口(IOCP)的简单分析出自掰掰开发-http://www.88dev.com/用DE
5、LPHI开发网络代码已经有一段时间了!我发现在网上用VC来实现完成端口(IOCP)的代码很多,但是使用DELPHI来实现的就比较少了。对IOCP讲的清楚的就更少了。在这里我把自己编写DELPHI下的IOCP写出来,希望对刚学完成端口的朋友有个帮助。首先我们来了解一些在使用IOCP的时候需要使用的一些结构!(1):单IO数据结构 LPVOID=Pointer; LPPER_IO_OPERATION_DATA=^PER_IO_OPERATION_DATA; PER_IO_OPERATION_DATA=packedrecord Overlapped:OVERLAPPED;
6、 DataBuf:TWSABUF; Buffer:array[0..1024]ofCHAR; BytesSEND:DWORD; BytesRECV:DWORD; end;上面的结构中Overlapped:OVERLAPPED;和DataBuf:TWSABUF;是固定的结构类型。Buffer:array[0..1024]ofCHAR;是用来保存接受数据的缓存。BytesSEND:DWORD;用来标志发送数据的长度。BytesRECV:DWORD;用来标志接受数据的长度。因为完成端口的工作者线程可以接受到来自客户端的数据,同时还可以接受到自己发送给客户端的数据,所以我们使
7、用BytesSEND,BytesRECV变量来说是用来区分这次的数据是来自客户端的数据还是自己发送出去的数据。详细的使用方法,我会在下面详细说明。(2):“单句柄数据结构” LPPER_HANDLE_DATA=^PER_HANDLE_DATA; PER_HANDLE_DATA=packedrecord Socket:TSocket; end;下来我从编写一个完成端口的为例说明。ifWSAStartUp($202,wsData)<>0thenbegin WSACleanup();end;加载SO
此文档下载收益归作者所有