随笔分类 - delphi socket
摘要:一直很烦恼delphi附带的socket控件都不能满足我的设计逻辑需要,无奈只好自己动手封装了API,并且得到实践的证明(至少有两个服务器能稳定运行至今),本socket组件的多线程机制是安全的稳定的。 在服务器端,创建线程池,对于每个客户连接对应一个独立的线程类,可以在线程内处理客户数据,并可以线程间采用同步机制交换数据,为通讯服务器的建立提供了技术实现的基础。 U版本的经过了缺陷优化,虽然仅是经过了测试也还没有得到实践运行,但从以往成熟的结构演变而来的,问题应该不大!附socket组件及相关单元源码:{*******************************************.
阅读全文
摘要:高性能的socket通讯IOCP服务器源码 很多人费尽心思,都没有找到一个完美的 I/O CP 例程,甚至跟人于误解,先将本人编写的例程公布出来,希望对那些苦苦寻觅的人带来收获。本例程可以作为初学者的学习之用,亦可以作为大型服务程序的通讯模块。其处理速度可以说,优化到了极点。如果理解了本例程的精髓,加上一个高效的通讯协议,你完全可以用它来构建一个高性能的通讯服务器。 在公布代码前,先谈谈I/O CP。对I/O CP的函数不多做说明了,网上很多,都一样。在此本人仅说一些技术上要注意的问题。 一、如何管理内存 1、IO数据缓冲管理 动态分配内存,是一种灵活的方式。但对于系统资源浪费是巨大...
阅读全文
摘要:WinSock学习笔记6:IOCP完成端口模型Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->unitUnit1;interfaceusesWinSock2,Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ExtCtrls;type//单IO数据结构LPER_IO_OPERATION_DATA=^TPER_IO_OPERAT
阅读全文
摘要:WinSock学习笔记4:WSAEventSelect模型WSAEventSelect类似于WSAAsycnSelect,区别就是当Socket上有“事件”时,传递一个Event而不是Windows消息。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->unitUnit1;interfaceusesWinSock2,Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Form
阅读全文
摘要:Winsock学习笔记5:I/O Overlapped (重叠)模式Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->unitUnit1;interfaceusesWinSock2,Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ExtCtrls;typeTWorkThread=class(TThread)privateFMe
阅读全文
摘要:WinSock学习笔记3:Select模型Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,WinSock,ExtCtrls;typeTWorkThread=class(TThread)privateFClientSocket:TSo
阅读全文
摘要:代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->varWSData:WSAData;ServerSocket:TSocket;ClientSocket:TSocket;LocalAddr:TSockAddrIn;ClientSocketAddr:TSockAddrIn;ClientSocketAddrLen:Integer;SocketMode:Integer;begin//初始化WinsockWSAStartUp($202,WSDat
阅读全文
摘要:Winsock学习笔记2:WSAAsyncSelect模型共有五种类型的套接字I/O模型,可让Winsock应用程序对I/O进行管理,它们包括: select(选择)、WSAAsyncSelect(异步选择)、WSAEventSelect(事件选择)、overlapped(重叠)以及 completion port(完成端口)。WSAAsyncSelect(异步选择)是最简单也最好理解的模式,因为用这个模式你都不需要明白多线程的编程知识~ 话不多说,先上代码(下面的代码不包含异常处理,仅为学习使用):Code highlighting produced by Actipro CodeHigh.
阅读全文
摘要:IOCP(I/O Completion Port,I/O完成端口)是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。在处理多个并发的异步I/O请求时,以往的模型都是在接收请求是创建一个线程来应答请求。这样就有很多的线程并行地运行在系统中。而这些线程都是可运行的,Windows内核花费大量的时间在进行线程的上下文切换,并没有多少时间花在线程运行上。再加上创建新线程的开销比较大,所以造成了效率的低下。 调用的步骤如下: 抽象出一个完成端口大概的处理流程: 1:创建一个完成端口。 2:创建一个线程A。 3:A线程循环调用GetQueuedCompletionStatus
阅读全文
摘要:基于Delphi的Socket I/O模型全接触老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系。他们的信会被邮递员投递到他们的信箱里。 这和Socket模型非常类似。下面我就以老陈接收信件为例讲解Socket I/O模型。 一:select模型 老陈非常想看到女儿的信。以至于他每隔10分钟就下楼检查信箱,看是否有女儿的信,在这种情况下,“下楼检查信箱”然后回到楼上耽误了老陈太多的时间,以至于老陈无法做其他工作。 select模型和老陈的这种情况非常相似:周而复始地去检查......如果有数据......接收/发送....... 使用线程来selec...
阅读全文
摘要:DELPHI下的SOCK编程 本文是写给公司新来的程序员的,算是一点培训的教材。本文不会涉及太多的编程细节,只是简单讲解在DELPHI下进行Winsock编程最好了解的知识。 题外话:我认为学习编程就如同学习外语一样,最好的方式是你先学会如何去运用它,然后才是了解它的语言特性、语法之类的东西。不过很可惜,我们以前的外语教育使用了相反的过程。软件编程也是一样,在很多人的大学阶段,你更多的是学习那些理论知识,学习“语法”,这里,我丝毫没有贬低理论知识重要性的意思。理论知识和实践是相辅相成的,但一个恰当的学习方式,很多时候可以让学习者得到事半功倍的效果。例如你学习《数据结构》中排序的概念,我们假设对
阅读全文
浙公网安备 33010602011771号