易语言IOCP完成端口源码
系统结构:Mem_Read_int,Mem_Write_int,子程序指针到整数,Call,GetAcceptExSockAddrs,AcceptEx,IntSocket,Socket_TCP,Socket_Bind,Socket_Listen,OverlappedCreate,OverlappedDestroy,DestroyBuffer,Isable,GetClient,ServerStart,ServerDestroy,PostAccept,WorkerThread,RemoveContext,GetData,ServerSend,启动,销毁,发送数据,取回客户,取回数据,List_Create,List_Destroy,List_Add,List_Clear,List_Remove,List_GetHead,List_SetHead,List_GetTail,List_SetTail,List_GetCurrent,List_SetCurrent,List_GetCount,List_SetCount,CopyMemDword_1,CopyMemDword_2,初始化链表,是否为空,取节点数,清空链表,插入节点,删除节点,到首节点,到尾节点,到前一节点,到下一节点,取记录值,置记录值,销毁,CreateIoCompletionPort,GetQueuedCompletionStatus,PostQueuedCompletionStatus,WSARecv,WSASend,closesocket,CloseHandle,ntohs,WSASocket,inet_addr,bind,listen,WSACleanup,WSAStartup,HeapAlloc,HeapFree,GetSystemInfo,HeapValidate,HeapCreate,CreateThread,HeapDestroy,Mem_Write_byte,Mem_Read_byte,setsockopt,WSAIoctl,LocalSize,Mem_Read_sockaddr_in,inet_ntoa,WSAGetLastError,GetWSAIoctl,EnterCriticalSection,LeaveCriticalSection,DeleteCriticalSection,InitializeCriticalSection,GetProcessHeap,
======程序集
| |
| |------ _启动子程序
| |
| |------ _临时子程序
| |
| |------ Mem_Read_int
| |
| |------ Mem_Write_int
| |
| |------ 子程序指针到整数
| |
| |------ Call
| |
| |------ GetAcceptExSockAddrs
| |
| |------ AcceptEx
| |
| |
======套接字
| |
| |------ IntSocket
| |
| |------ Socket_TCP
| |
| |------ Socket_Bind
| |
| |------ Socket_Listen
| |
| |
======远程服务
| |
| |------ OverlappedCreate
| |
| |------ OverlappedDestroy
| |
| |------ DestroyBuffer
| |
| |------ Isable
| |
| |------ GetClient
| |
| |------ ServerStart
| |
| |------ ServerDestroy
| |
| |------ PostAccept
| |
| |------ WorkerThread
| |
| |------ RemoveContext
| |
| |------ GetData
| |
| |------ ServerSend
| |
| |
======远程服务端
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 启动
| |
| |------ 销毁
| |
| |------ 发送数据
| |
| |------ 取回客户
| |
| |------ 取回数据
| |
| |
======list核心
| |
| |------ List_Create
| |
| |------ List_Destroy
| |
| |------ List_Add
| |
| |------ List_Clear
| |
| |------ List_Remove
| |
| |------ List_GetHead
| |
| |------ List_SetHead
| |
| |------ List_GetTail
| |
| |------ List_SetTail
| |
| |------ List_GetCurrent
| |
| |------ List_SetCurrent
| |
| |------ List_GetCount
| |
| |------ List_SetCount
| |
| |------ CopyMemDword_1
| |
| |------ CopyMemDword_2
| |
| |
======List链表
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 初始化链表
| |
| |------ 是否为空
| |
| |------ 取节点数
| |
| |------ 清空链表
| |
| |------ 插入节点
| |
| |------ 删除节点
| |
| |------ 到首节点
| |
| |------ 到尾节点
| |
| |------ 到前一节点
| |
| |------ 到下一节点
| |
| |------ 取记录值
| |
| |------ 置记录值
| |
| |------ 销毁
| |
| |
======调用的Dll
| |
| |---[dll]------ CreateIoCompletionPort
| |
| |---[dll]------ GetQueuedCompletionStatus
| |
| |---[dll]------ PostQueuedCompletionStatus
| |
| |---[dll]------ WSARecv
| |
| |---[dll]------ WSASend
| |
| |---[dll]------ closesocket
| |
| |---[dll]------ CloseHandle
| |
| |---[dll]------ ntohs
| |
| |---[dll]------ WSASocket
| |
| |---[dll]------ inet_addr
| |
| |---[dll]------ bind
| |
| |---[dll]------ listen
| |
| |---[dll]------ WSACleanup
| |
| |---[dll]------ WSAStartup
| |
| |---[dll]------ HeapAlloc
| |
| |---[dll]------ HeapFree
| |
| |---[dll]------ GetSystemInfo
| |
| |---[dll]------ HeapValidate
| |
| |---[dll]------ HeapCreate
| |
| |---[dll]------ CreateThread
| |
| |---[dll]------ HeapDestroy
| |
| |---[dll]------ Mem_Write_byte
| |
| |---[dll]------ Mem_Read_byte
| |
| |---[dll]------ setsockopt
| |
| |---[dll]------ WSAIoctl
| |
| |---[dll]------ LocalSize
| |
| |---[dll]------ Mem_Read_sockaddr_in
| |
| |---[dll]------ inet_ntoa
| |
| |---[dll]------ WSAGetLastError
| |
| |---[dll]------ GetWSAIoctl
| |
| |---[dll]------ EnterCriticalSection
| |
| |---[dll]------ LeaveCriticalSection
| |
| |---[dll]------ DeleteCriticalSection
| |
| |---[dll]------ InitializeCriticalSection
| |
| |---[dll]------ GetProcessHeap
调用的DLL命令:
.DLL命令 CreateIoCompletionPort, 整数型, "kernel32.dll", "CreateIoCompletionPort", , CreateIoCompletionPort函数关联一个已打开的文件实例和新建的或已存在的I/0完成端口,或者创建一个未关联任何文件的I/O完成端口返回一个IOCP的句柄。若为NULL则创建失败,不为NULL则创建成功。
.参数 Handle, 整数型, , 是有效的文件句柄或INVALID_HANDLE_VALUE
.参数 ExistingCompletionPort, 整数型, , 是已经存在的完成端口。如果为NULL,则为新建一个IOCP
.参数 CompletionKey, 整数型, , 是传送给处理函数的参数
.参数 NumberOfConcurrentThreads, 整数型, , 是有多少个线程在访问这个消息队列。当参数ExistingCompletionPort不为0的时候,系统忽略该参数,当该参数为0表示允许同时相等数目于处理器个数的线程访问该消息队列
.DLL命令 GetQueuedCompletionStatus, 逻辑型, "kernel32.dll", "GetQueuedCompletionStatus", , 比如此时端口上完成的是什么操作,数据是什么等,还有,系统如何做到自动填充上述的结构的,也就是说,系统怎么知道在Overlap->OpCode存放的应该是操作类型,如读,写操作,而在Overlap->wbuf存放的应该是读写数据调用成功,则返回非零数值,相关数据存于lpNumberOfBytes、lpCompletionKey、lpoverlapped变量中。失败则返回零值
.参数 CompletionPort, 整数型, , 指定的IOCP,该值由CreateIoCompletionPort函数创建
.参数 lpNumberOfBytesTransferred, 整数型, 传址, 一次完成后的I/O操作所传送数据的字节数
.参数 lpCompletionKey, 整数型, 传址, 当文件I/O操作完成后,用于存放与之关联的CK
.参数 lpOverlapped, 整数型, 传址, 为调用IOCP机制所引用的OVERLAPPED结构
.参数 dwMilliseconds, 整数型, , 用于指定调用者等待CP的时间
.DLL命令 PostQueuedCompletionStatus, 逻辑型, "kernel32.dll", "PostQueuedCompletionStatus", , 在进行重叠I/O操作的同时,强行释放一个OVERLAPPED结构,最好的方法是针对每一个套接字句柄,调用CloseSocket函数。任何尚未进行的重叠I/O操作都会完成。一旦所有套接字关闭,便需在完成端口上,终止所有工作者线程。这时候需要使用PostQueuedCompletionStatus
.参数 CompletionPort, 整数型, , 指定想向其发送一个完成数据包的完成端口对象
.参数 dwNumberOfBytesTransferred, 整数型, , 指定—个值,直接传递给GetQueuedCompletionStatus函数中对应的参数
.参数 dwCompletionKey, 整数型, , 指定—个值,直接传递给GetQueuedCompletionStatus函数中对应的参数
.参数 lpOverlapped, 整数型, , 指定—个值,直接传递给GetQueuedCompletionStatus函数中对应的参数
.DLL命令 WSARecv, 整数型, "ws2_32.dll", "WSARecv", , WSARecv()是从一个套接口接收数据的程序。主要用于在重叠模型中接收数据WSA_IO_PENDING : 最常见的返回值,这是说明我们的WSARecv操作成功了,但是I/O操作还没有完成,所以我们就需要绑定一个事件来通知我们操作何时完成
.参数 s, 整数型, , 当然是投递这个操作的套接字
.参数 lpBuffers, 整数型, , 一个指向WSABUF结构数组的指针。每一个WSABUF结构包含一个缓冲区的指针和缓冲区的长度
.参数 dwBufferCount, 整数型, , lpBuffers数组中WSABUF结构的数目
.参数 lpNumberOfBytesRecvd, 整数型, 传址, 如果接收操作立即结束,一个指向本调用所接收的字节数的指针
.参数 lpFlags, 整数型, 传址, 一个指向标志位的指针
.参数 lpOverlapped, 整数型, , 一个指向WSAOVERLAPPED结构的指针(对于非重叠套接口则忽略)
.参数 lpCompletionRoutine, 整数型, , 一个指向接收操作结束后调用的例程的指针(对于非重叠套接口则忽略)
.DLL命令 WSASend, 整数型, "ws2_32.dll", "WSASend", , WSASend函数:在一个已连接的套接口上发送数据若无错误发生且发送操作立即完成,则WSASend()函数返回0
.参数 s, 整数型, , 标识一个已连接套接口的描述字
.参数 lpBuffers, 整数型, , 一个指向WSABUF结构数组的指针。每个WSABUF结构包含缓冲区的指针和缓冲区的大小
.参数 dwBufferCount, 整数型, , lpBuffers数组中WSABUF结构的数目
.参数 lpNumberOfBytesSent, 整数型, 传址, 如果发送操作立即完成,则为一个指向所发送数据字节数的指针
.参数 dwFlags, 整数型, , 标志位
.参数 lpOverlapped, 整数型, , 指向WSAOVERLAPPED结构的指针(对于非重叠套接口则忽略)
.参数 lpCompletionRoutine, 整数型, , 一个指向发送操作完成后调用的完成例程的指针。(对于非重叠套接口则忽略)
.DLL命令 closesocket, 整数型, "ws2_32.dll", "closesocket", , 本函数关闭一个套接口
.参数 s, 整数型, , 一个套接口
.DLL命令 CloseHandle, 整数型, "kernel32", "CloseHandle", , 关闭一个内核对象。其中包括文件、文件映射、进程、线程、security和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的 非零表示成功,零表示失败。会设置GetLastError
.参数 hObject, 整数型, , 欲关闭的一个对象的句柄;
.DLL命令 ntohs, 整数型, "ws2_32.dll", "ntohs"
.参数 netshort, 短整数型
.DLL命令 WSASocket, 整数型, "ws2_32.dll", "WSASocketA"
.参数 af, 整数型
.参数 lType, 整数型
.参数 protocol, 整数型
.参数 lpProtocolInfo, 整数型
.参数 g, 整数型
.参数 dwFlags, 整数型
.DLL命令 inet_addr, 整数型, "ws2_32.dll", "inet_addr"
.参数 cp, 文本型
.DLL命令 bind, 整数型, "ws2_32.dll", "bind"
.参数 s, 整数型
.参数 addr, sockaddr_in
.参数 namelen, 整数型
.DLL命令 listen, 整数型, "ws2_32.dll", "listen"
.参数 s, 整数型
.参数 backlog, 整数型
.DLL命令 WSACleanup, 整数型, "ws2_32.dll", "WSACleanup"
.DLL命令 WSAStartup, 整数型, "ws2_32.dll", "WSAStartup"
.参数 wVersionRequired, 短整数型
.参数 lpWSAData, WSADATA
.DLL命令 HeapAlloc, 整数型, "kernel32", "HeapAlloc", , 从堆中分配内存
.参数 hHeap, 整数型
.参数 dwFlags, 整数型
.参数 dwBytes, 整数型
.DLL命令 HeapFree, 逻辑型, "kernel32", "HeapFree", , 释放从堆中分配的内存
.参数 hHeap, 整数型
.参数 dwFlags, 整数型
.参数 lpMem, 整数型
.DLL命令 GetSystemInfo, , "kernel32.dll", "GetSystemInfo", , 取当前系统的信息
.参数 lpSystemInfo, SYSTEM_INFO, 传址
.DLL命令 HeapValidate, 逻辑型, "kernel32", "HeapValidate", , 校验指定堆结构
.参数 hHeap, 整数型
.参数 dwFlags, 整数型
.参数 lpMem, 整数型
.DLL命令 HeapCreate, 整数型, "kernel32", "HeapCreate", , 建立堆
.参数 flOptions, 整数型
.参数 dwInitialSize, 整数型
.参数 dwMaximumSize, 整数型
.DLL命令 CreateThread, 整数型, "kernel32.dll", "CreateThread", , Return value is a handle to the new thread.If the function fails, the return value is NULL.
.参数 属性, 整数型, , 是线程的属性
.参数 栈大小, 整数型, , 是线程的栈大小
.参数 函数开始地址, 子程序指针, , 是线程函数的开始地址
.参数 函数参数, 整数型, , 是传送给线程函数的参数
.参数 标志, 整数型, , 是创建线程标志,比如挂起线程
.参数 ID, 整数型, 传址, 是标识这个线程的ID
.DLL命令 HeapDestroy, 逻辑型, "kernel32", "HeapDestroy", , 取消堆
.参数 hHeap, 整数型
.DLL命令 Mem_Write_byte, , "kernel32.dll", "RtlMoveMemory", , 写入字节集数据
.参数 Destination, 整数型
.参数 Source, 字节集
.参数 Length, 整数型
.DLL命令 Mem_Read_byte, , "kernel32.dll", "RtlMoveMemory", , 读字节集数据
.参数 目标数据, 字节集, 传址
.参数 原数据, 整数型
.参数 尺寸, 整数型
.DLL命令 setsockopt, 整数型, "ws2_32.dll", "setsockopt", , setsockopt()函数,用于任意类型、任意状态套接口的设置选项值。尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项
.参数 s, 整数型, , 标识一个套接口的描述字
.参数 level, 整数型, , 选项定义的层次;支持SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6
.参数 optname, 整数型, , 需设置的选项
.参数 optval, 文本型, 传址, 指针,指向存放选项待设置的新值的缓冲区
.参数 optlen, 整数型, , optval缓冲区长度
.DLL命令 WSAIoctl, 整数型, "ws2_32.dll", "WSAIoctl", , WSAIoctl(),控制一个套接口的模式
.参数 s, 整数型, , 你需要控制的套接口的句柄
.参数 dwIoControlCode, 整数型, , 将进行的操作的控制代码
.参数 lpvInBuffer, tcp_keepalive, 传址, 输入缓冲区的地址(如果你想指定一个函数对套接字进行控制,这里可以是一个guid,指定这个控制函数的guid)
.参数 cbInBuffer, 整数型, , 输入缓冲区的大小(这里为guid的大小,即sizeof(&guid))
.参数 lpvOutBuffer, 整数型, , 输出缓冲区的地址(这里即是函数指针的地址)
.参数 cbOutBuffer, 整数型, , 输出缓冲区的大小(函数指针的大小)
.参数 lpcbBytesReturned, 整数型, 传址, 输出实际字节数的地址
.参数 lpOverlapped, 整数型, , WSAOVERLAPPED结构的地址(一般为NULL)
.参数 lpCompletionRoutine, 整数型, , 一个指向操作结束后调用的例程指针(一般为NULL)
.DLL命令 LocalSize, 整数型, "kernel32", "LocalSize", , 返回本地内存块大小
.参数 hMem, tcp_keepalive
.DLL命令 Mem_Read_sockaddr_in, , "kernel32.dll", "RtlMoveMemory", , 读入sockaddr_in
.参数 Destination, sockaddr_in
.参数 Source, 整数型
.参数 Length, 整数型
.DLL命令 inet_ntoa, 文本型, "ws2_32.dll", "inet_ntoa"
.参数 lIn, 整数型
.DLL命令 WSAGetLastError, 整数型, "ws2_32.dll", "WSAGetLastError"
.DLL命令 GetWSAIoctl, 整数型, "ws2_32.dll", "WSAIoctl"
.参数 s, 整数型, , 套接字
.参数 dwIoControlCode, 整数型, , 将进行的操作的控制代码
.参数 lpvInBuffer, GUID, 传址, 输入缓冲区的地址
.参数 cbInBuffer, 整数型, , 输入缓冲区的大小
.参数 lpvOutBuffer, 整数型, 传址, 输出缓冲区的地址
.参数 cbOutBuffer, 整数型, , 输出缓冲区的大小
.参数 lpcbBytesReturned, 整数型, 传址, 输出实际字节数的地址
.参数 lpOverlapped, 整数型, , WSAOVERLAPPED结构的地址
.参数 lpCompletionRoutine, 整数型, , 一个指向操作结束后调用的例程指针
.DLL命令 EnterCriticalSection, , "kernel32", "EnterCriticalSection", , 进入许可区
.参数 lpCriticalSection, 整数型
.DLL命令 LeaveCriticalSection, , "kernel32", "LeaveCriticalSection", , 退出许可区
.参数 lpCriticalSection, 整数型
.DLL命令 DeleteCriticalSection, , "kernel32", "DeleteCriticalSection", , 销毁许可证
.参数 lpCriticalSection, 整数型, , 临界资源对象指针
.DLL命令 InitializeCriticalSection, , "kernel32", "InitializeCriticalSection", , 初始化临界段对象
.参数 lpCriticalSection, 整数型
.DLL命令 GetProcessHeap, 整数型, "kernel32", "GetProcessHeap", , 获取调用过程堆句柄
易语言类似易的KEY注册验证和KEY生成模块源码,生成钥匙文件,文本加密,钥匙文件注册,十六进制到十进制,文本解密...
易语言简易版超级列表框加入超链接源码,超级列表框置超链接,SendMessage_...
易语言监控tcp连接后续删除连接源码,GetPort,GetAscIP,API_GetTcpTable,API_LocalSize,API_CopyMemory,API_inet_ntoa,API_lstrlen,API_ntohs,API_SetTcpEntry...
易语言监控TCP连接API源码,GetPort,GetAscIP,API_GetTcpTable,API_LocalSize,API_CopyMemory,API_inet_ntoa,API_lstrlen,API_ntohs...
易语言电影信息采集器金牛报喜交流源码,采集信息,提取网页信息,读取海报...
易语言清除cookies模块源码,清空cookies,清空history,清空cache,清空cache文件,列出对应项目,清除项目,InternetSetOption,FindFirstUrlCacheEntry,FindNextUrlCacheEntry,FindCloseUrlCache,DeleteUrlCacheEntry...
易语言注册表监视源码,CreateEvent,RegOpenKeyEx,RegCloseKey,CloseHandle,RegNotifyChangeKeyValue,WaitForSingleObject,WaitForMultipleObjects...
易语言歌词同步源码,载入字幕文件,同步,滚动字幕...
易语言本地修改QQ群群公告源码,搜索QQ号,搜索QQ群,获取群公告,更改群公告...