| | 网站首页 | 考研信息中心 | 考研资料下载 | 考研论坛 | 考研专业试题 | 2008考研招生简章 | 考研图书 | 留言板 | 考研图片中心 | | ||||||||
![]() |
|
|||||||
|
|
您现在的位置: 考研信息网 >> 考研信息中心 >> 计算机类考试首页 >> 微软认证 >> 最新资讯 >> 正文 | |
|
|||||
| Windows网络编程总结(二) | |||||
| 作者:佚名 文章来源:不详 点击数: 更新时间:2006-11-10 | |||||
|
本站推荐Firefox浏览器,有效阻止病毒和垃圾弹出.[正版免费下载] 1. WinSokcet Architecture2. 关于AcceptEx 使用此函数时,要包含头文:Mswsock.h,同时要链接:Mswsock.lib。可在源程序中加入下面的语句,这样在编译时,将自动链接Mswsock.lib。 #pragma comment(lib,” Mswsock.lib”) 下面是使用AcceptEx函数的示例代码: #define STRICT #define _WIN32_WINNT 0x0500 // Windows 2000 or later #define WIN32_LEAN_AND_MEAN #include #include #include #pragma comment(lib,"Ws2_32.lib") #pragma comment(lib,"Mswsock.lib") int main() { const int BUFSIZE = 48; LPFN_ACCEPTEX lpfnAcceptEx = NULL; GUID GuidAcceptEx = WSAID_ACCEPTEX; DWORD dwBytes = 0; SOCKET ListenSocket = INVALID_SOCKET; SOCKET ClientSocket = INVALID_SOCKET; HANDLE hCompPort = INVALID_HANDLE_VALUE; OVERLAPPED ol; char buf[BUFSIZE]; // Init WinSock Lib .... ListenSocket = WSASocket(AF_IPX, SOCK_STREAM, NSPROTO_SPX, NULL, 0, WSA_FLAG_OVERLAPPED); ClientSocket = WSASocket(AF_IPX, SOCK_STREAM, NSPROTO_SPX, NULL, 0, WSA_FLAG_OVERLAPPED); // Bind && Listen .... // Associate the listening socket with the completion port CreateIoCompletionPort((HANDLE)ListenSocket, hCompPort, (u_long)0, 0); // Get AccpetEx Function WSAIoctl(ListenSocket, SIO_GET_EXTENSION_FUNCTION_POINTER, &GuidAcceptEx, sizeof(GuidAcceptEx), &lpfnAcceptEx, sizeof(m_WorkInfo.AcceptInfo.lpfnAcceptEx), &dwBytes, NULL, NULL ); ZeroMemory(buf,BUFSIZE); ZeroMemory(&ol,sizeof(OVERLAPPED)); // Post Accept Message lpfnAcceptEx(ListenSocket, ClientSocket, buf, 0, sizeof(SOCKADDR_IN) + 16, sizeof(SOCKADDR_IN) + 16, &dwBytes, &ol ); } 需要注意的是,通过WSAIoctl获取AcceptEx函数指针时,只需要传递给WSAIoctl一个有效的SOCKET即可,该Socket的类型不会影响获取的AcceptEx函数指针。 如果不希望AcceptEx建立连接后等待用户发送数据,那么必须将第四个参数设为0。第5、6参数必须是对应SOCKET的地址类型的大小再加上16个字节。 为了使服务器能较好的处理用户连接请求,可采取如下两种策略: A.设定两个界限值,使系统未处理的Accept操作保持在一个固定水平。推荐上限为10; B.通过WSAEventSelect函数监听ListenSocket上的FD_ACCEPT事件。 当关闭完成端口时,如果还有未处理的Accepte操作,应该先关闭ListenSocket,然后在IOCP中,处理这些Accept操作(进行资源释放等),切记不要强行终止那些没有处理的Accept操作,否则会造成内存泄漏。 为防止恶意用户(建立连接后,不发送数据),可设置ListenSocket的SO_CONNECT_TIME属性。 如果希望ClientSocket具有和ListenSocket相同的属性,需要对ClientSocket调用SO_UPDATE_ACCEPT_CONTEXT。 |
|||||
|
考研信息网在线版权与免责声明 1、 凡本站注明“稿件来源:考研信息网(sanwww.com)”的所有文字、图片和音视频稿件,版权均属本网所有,任何媒体、 网站或个人未经本网协议授权不得转载、转贴或以其他方式复制发表。已经本站协议授权的媒体、网站,在下载使用时 必须注明"稿件来源:sanwww.com",违者本站将依法追究责任。 2、本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着 赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。 3、考研试题、各种考试试题以及考试信息转载于各大bbs论坛,就其真实性本站无法证实,并不意味着赞同其观点。 如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。 |
|||||
| 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站地图 | | |
![]() |
版权所有 Copyright© 2005 考研信息网 站长:考研信息网 |