- 1
- 0
- 约8.07千字
- 约 8页
- 2016-02-25 发布于江苏
- 举报
Socket IO模型 六种讲解.doc
本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教。一:select模型二:WSAAsyncSelect模型三:WSAEventSelect模型四:Overlapped I/O 事件通知模型五:Overlapped I/O 完成例程模型六:IOCP模型老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系。他们的信会被邮递员投递到他们的信箱里。这和Socket模型非常类似。下面我就以老陈接收信件为例讲解Socket I/O模型~~~一:select模型老陈非常想看到女儿的信。以至于他每隔10分钟就下楼检查信箱,看是否有女儿的信~~~~~在这种情况下,下楼检查信箱然后回到楼上耽误了老陈太多的时间,以至于老陈无法做其他工作。select模型和老陈的这种情况非常相似:周而复始地去检查......如果有数据......接收/发送.......使用线程来select应该是通用的做法:procedure TListenThread.Execute;varaddr : TSockAddrIn;fd_read : TFDSet;timeout : TTimeVal;ASock,MainSock : TSocket;len, i : Integer;beginMainSock := socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );addr.sin_family := AF_INET;addr.sin_port := htons(5678);addr.sin_addr.S_addr := htonl(INADDR_ANY);bind( MainSock, @addr, sizeof(addr) );listen( MainSock, 5 );while (not Terminated) dobeginFD_ZERO( fd_read );FD_SET( MainSock, fd_read );timeout.tv_sec := 0;timeout.tv_usec := 500;if select( 0, @fd_read, nil, nil, @timeout ) 0 then //至少有1个等待Accept的connectionbeginif FD_ISSET( MainSock, fd_read ) thenbeginfor i:=0 to fd_read.fd_count-1 do //注意,fd_count = 64,也就是说select只能同时管理最多64个连接beginlen := sizeof(addr);ASock := accept( MainSock, addr, len );if ASock INVALID_SOCKET then....//为ASock创建一个新的线程,在新的线程中再不停地selectend;end;end;end; //while (not self.Terminated)shutdown( MainSock, SD_BOTH );closesocket( MainSock );end;二:WSAAsyncSelect模型后来,老陈使用了微软公司的新式信箱。这种信箱非常先进,一旦信箱里有新的信件,盖茨就会给老陈打电话:喂,大爷,你有新的信件了!从此,老陈再也不必频繁上下楼检查信箱了,牙也不疼了,你瞅准了,蓝天......不是,微软~~~~~~~~微软提供的WSAAsyncSelect模型就是这个意思。WSAAsyncSelect模型是Windows下最简单易用的一种Socket I/O模型。使用这种模型时,Windows会把网络事件以消息的形势通知应用程序。首先定义一个消息标示常量:const WM_SOCKET = WM_USER + 55;再在主Form的private域添加一个处理此消息的函数声明:privateprocedure WMSocket(var Msg: TMessage); message WM_SOCKET;然后就可以使用WSAAsyncSelect了:varaddr : TSockAddr;sock : TSocket;sock := socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );addr.sin_family := AF_INET;addr.sin_port := htons(5678);addr.sin_addr.S_addr := htonl(INADDR_ANY);bin
您可能关注的文档
最近下载
- 阿特拉斯.科普科-离心空压机说明书AIB 9829300826-01.pdf VIP
- 基于MATLAB的电力系统短路故障分析与仿真.pdf VIP
- 三年级生活语文《镜子里的我》教案公开课.docx VIP
- 2025高一春季讲义打印版.pdf VIP
- 电厂运维检修实施方案.docx VIP
- 火电厂项目运维管理实施方案.docx VIP
- 英语文学阅读与鉴赏B7_Unit 7_Dusk.doc VIP
- 《GB_T 39039-2020高强度钢氢致延迟断裂评价方法》专题研究报告.pptx VIP
- 超声介入室建设方案(含功能布局与合规标准).docx
- 默纳克NICE9000V荣耀控制柜调试手册.pdf VIP
原创力文档

文档评论(0)