摘要:
[代码]1.在DELPHI中,我们用record关键字来表明一个记录,有时候,我们还会看到用packed record来声明的记录,这二者的区别就在于存储方式的不同;在windows中,内存的分配一次是4个字节的,而Packed按字节进行内存的申请和分配,这样速度要慢一些,因为需要额外的时间来进行指针的定位。因此如果不用Packed的话,Delphi将按一次4个字节的方式申请内存,因此如果一个变量... 阅读全文
摘要:
WinSock学习笔记6:IOCP完成端口模型[代码]该代码仅仅是练习IOCP的函数使用和大体的实现步骤,里面很多细节并不是唯一的方法,例如单IO数据结构和单句柄数据结构的定义等等。 阅读全文
摘要:
Winsock学习笔记5:I/O Overlapped (重叠)模式[代码]1.此代码只是为了学习函数的使用方法,为了使代码简单,此处使用Timer管理客户端连接,并为每个连接创建独立的线程,Overlapped的处理方式可在线程的执行部分查看,实际应用中不应该用这种模式;2.此代码为消息型的重叠(I/O Overlapped)模式,还有一种“完成例程”模式(非完成端口); 阅读全文
摘要:
WinSock学习笔记4:WSAEventSelect模型WSAEventSelect类似于WSAAsycnSelect,区别就是当Socket上有“事件”时,传递一个Event而不是Windows消息。[代码]1.WSAEventSelect需要Winsock2.0,可以google搜索Winsock2.pas;2.使用Bind的时候要注意:LocalAddr.sin_a... 阅读全文
摘要:
WinSock学习笔记3:Select模型[代码]1.使用Select模型,要定义一个FDSet结构,将客户端Socket加入该结构,用Select函数轮询测试该Socket的读写状态。FDSet结构: typedef struct fd_set { u_int fd_count; SOCKET fd_array[FD_SETSIZE]; } fd_set;2.操作FDSet结构有4个预定义的... 阅读全文
摘要:
Winsock学习笔记2:WSAAsyncSelect模型共有五种类型的套接字I/O模型,可让Winsock应用程序对I/O进行管理,它们包括: select(选择)、WSAAsyncSelect(异步选择)、WSAEventSelect(事件选择)、overlapped(重叠)以及 completion port(完成端口)。WSAAsyncSelect(异步选择)是最简单也最好理解的模式,因为... 阅读全文
摘要:
代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--varWSData:WSAData;ServerSocket:TSocket;ClientSocket:TSocket;LocalAddr:TSockAddrIn;ClientSocketAddr:T... 阅读全文
摘要:
基于Delphi的Socket I/O模型全接触老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系。他们的信会被邮递员投递到他们的信箱里。 这和Socket模型非常类似。下面我就以老陈接收信件为例讲解Socket I/O模型。 一:select模型 老陈非常想看到女儿的信。以至于他每隔10分钟就下楼检查信箱,看是否有女儿的信,在这种情况下,“下楼检查信箱&... 阅读全文
摘要:
IOCP(I/O Completion Port,I/O完成端口)是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。在处理多个并发的异步I/O请求时,以往的模型都是在接收请求是创建一个线程来应答请求。这样就有很多的线程并行地运行在系统中。而这些线程都是可运行的,Windows内核花费大量的时间在进行线程的上下文切换,并没有多少时间花在线程运行上。再加上创建新线程的开销... 阅读全文