socketio模型六种讲解

socketio模型六种讲解

ID:34725709

大小:74.18 KB

页数:8页

时间:2019-03-10

socketio模型六种讲解_第1页
socketio模型六种讲解_第2页
socketio模型六种讲解_第3页
socketio模型六种讲解_第4页
socketio模型六种讲解_第5页
资源描述:

《socketio模型六种讲解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、本文简单介绍了当前Windows支持的各种SocketI/O模型,如果你发现其中存在什么错误请务必赐教。一:select模型二:WSAAsyncSelect模型三:WSAEventSelect模型四:OverlappedI/O事件通知模型五:OverlappedI/O完成例程模型六:IOCP模型老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系。他们的信会被邮递员投递到他们的信箱里。这和Socket模型非常类似。下面我就以老陈接收信件为例讲解SocketI/O模型~~~一:select模型老陈非常想看到女儿的信。以至于

2、他每隔10分钟就下楼检查信箱,看是否有女儿的信~~~~~在这种情况下,"下楼检查信箱"然后回到楼上耽误了老陈太多的时间,以至于老陈无法做其他工作。select模型和老陈的这种情况非常相似:周而复始地去检查......如果有数据......接收/发送.......使用线程来select应该是通用的做法:procedureTListenThread.Execute;varaddr:TSockAddrIn;fd_read:TFDSet;timeout:TTimeVal;ASock,MainSock:TSocket;len,i:Integ

3、er;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(notTerminated)dobeginFD_ZERO(fd_read);FD_SET(MainSock,fd_re

4、ad);timeout.tv_sec:=0;timeout.tv_usec:=500;ifselect(0,@fd_read,nil,nil,@timeout)>0then//至少有1个等待Accept的connectionbeginifFD_ISSET(MainSock,fd_read)thenbeginfori:=0tofd_read.fd_count-1do//注意,fd_count<=64,也就是说select只能同时管理最多64个连接beginlen:=sizeof(addr);ASock:=accept(MainSoc

5、k,addr,len);ifASock<>INVALID_SOCKETthen....//为ASock创建一个新的线程,在新的线程中再不停地selectend;end;end;end;//while(notself.Terminated)shutdown(MainSock,SD_BOTH);closesocket(MainSock);end;二:WSAAsyncSelect模型后来,老陈使用了微软公司的新式信箱。这种信箱非常先进,一旦信箱里有新的信件,盖茨就会给老陈打电话:喂,大爷,你有新的信件了!从此,老陈再也不必频繁上下楼检查

6、信箱了,牙也不疼了,你瞅准了,蓝天......不是,微软~~~~~~~~微软提供的WSAAsyncSelect模型就是这个意思。WSAAsyncSelect模型是Windows下最简单易用的一种SocketI/O模型。使用这种模型时,Windows会把网络事件以消息的形势通知应用程序。首先定义一个消息标示常量:constWM_SOCKET=WM_USER+55;再在主Form的private域添加一个处理此消息的函数声明:privateprocedureWMSocket(varMsg:TMessage);messageWM_SOC

7、KET;然后就可以使用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);bind(m_sock,@addr,sizeof(SOCKADDR));WSAAsyncSelect(m_sock,Handle,WM_SOCK

8、ET,FD_ACCEPTorFD_CLOSE);listen(m_sock,5);....应用程序可以对收到WM_SOCKET消息进行分析,判断是哪一个socket产生了网络事件以及事件类型:procedureTfmMain.WMSocket(va

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。