实验五 I/O 模型网络程序实验

本文详细介绍了使用Winsock进行I/O模型网络编程的实验,包括实验目的、设计、过程,重点讨论了WSAEventSelect函数及其在网络事件中的应用。实验中,服务器与客户端能成功建立连接并通信,当客户端输入特定指令时关闭连接。通过WSAEventSelect设置网络事件监听,并在事件发生时进行相应处理。
摘要由CSDN通过智能技术生成

一、 实验目的

        掌握 Winsock I/O 模型工作原理;
        熟悉 I/O 模型中使用的 Winsock 接口函数;
        掌握使用 I/O 模型进行网络程序设计的编程步骤;

二、实验设计

        1、背景知识
        Windows套接字工作模式
        Windows 套接字工作模式分为两类:阻塞(Blocking)模式和非阻塞(NonBlocking)模式。在阻塞模式下,在I/O操作完成前,执行操作的Winsock函数会一直等待下去,不会立即返回(将控制权交还给程序),这就意味着任一个线程在某一时刻只能执行一个输入/输出(I/O)操作,而且应用程序很难同时通过多个建好连接的套接字进行通信。正如我们在以前的实验中看到的,服务端或客户端在运行到recv()函数时会进入阻塞状态,直到对方响应时(即运行了send()函数后)才能继续执行下去。在默认的情况下,套接字工作在阻塞模式。在非阻塞模式下,Winsock函数会立即返回,并交出程序的控制权,这就为我们实际需要中同时管理多个连接、并维持与每个连接的及时通信提供了基础。在实际问题中,Winsock编程经常需要使用多线程的方法使程序对用户的动作进行及时响应,但会增加一些开销,并且扩展性比较差。尽管非阻塞模式套接字在使用上不如阻塞套接字简单,但它在功能上还是非常强大的,同时简化了我们针对实际问题的编程过程。
        WinsockI/O模型
1)选择模型(SelectModel)
2)异步选择模型(WSAAsyncSelectModel)
3)事件选择模型(WSAEventSelectModel)
4)重叠模型(OverlappedModel)
5)完成端口模型(CompletionPortModel
        本次实验使用了事件选择模型,所以下面介绍事件选择模型:
        WSAEventSelect模型是WinSock提供的另一个异步I/O模型,与WSAAsyncSelect模型类似,也允许应用程序在一个或多个套接字上接收以事件为基础的网络事件通知,并且支持的网络事件与WSAAsyncSelect模型一样。与WSAAsyncSelect模型的主要区别在于网络事件会被发送到一个事件对象句柄,而不是发送到一个窗口。WSAEventSelect函数原型如下:intWSAEventSelect(SOCKETs,WSAEVENThEventObject,longlNetworkEvents);
        使用WSAEventSelect模型编程的基本步骤:
(1).创建一个事件句柄表和一个对应的套接字句柄表。
(2).每创建一个套接字,就创建一个事件对象,把它们的句柄分别放入上面的两个表中,并调用WSAEventSelect将二者关联起来。
(3).调用WSAWaitForMultipleEvents在所有事件对象上等待(bWaitAll=FALSE),函数返回后,从第一个有信号的事件对象开始检查事件对象表中的事件对象是否有信号(再次调用WSAWaitForMultipleEvents)。
(4).调用WSAEnumNetworkEvents(),获取套接字上相应的网络事件并处理,然后继续在事件对象上等待。
        2、实验设计
        (1)、利用事件选择模型,构建一个 TCP 服务器,该服务器能:
        接受客户端连接时显示客户端的 IP,PORT信息;
        接收客户端连接时显示其连接编号,客户端退出时显示关闭的连接编号;
        能显示客户端发来的数据;
        能从键盘输入数据并发到客户端;
        其他数据传送功能(可选)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值