Socket基础八:网络IO模型的应用

作者:刘磊 2020.4.27
   参考书目:《Windows网络编程》刘琰等著

一、实验目的

1)掌握WindowsI/O操作的基本原理。
2)掌握阻塞模型、非阻塞模型、select 模型、WSAAsyncSelect 模型、WSAEventSelect 模型、重叠I/O模型和完成端口模型的程序设计方法。
3)熟悉各种模型的优缺点,培养程序员在各种应用场景下正确选择I/O模型的意识和能力。
4)锻炼程序员在网络应用程序设计过程中检查错误和排除错误的能力。

二、网络中的 /O操作

使用网络设备进行数据的发送与接收面临着与传统I0操作类似的环节,网络操作经常会面临IO事件的等待,这些等待事件大致分为以下几类:
●等待输入操作: 等待网络中有数据可被接收。
●等待输出操作:等待套接字实现中有足够的缓冲区保存待发送的数据。
●等待连接请求:等待有新的客户端建立连接或对等方断开连接。
●等待连接响应: 等待服务器对连接的响应。
●等待异常:等待网络连接异常或有带外数据可被接收。

三、服务器的基本执行步骤如下:

1)引用头文件。
2)创建数据报套接字。
3)捆绑服务器的指定端口到套接字。
4)设置端口可重用。
5)创建流式套接字。
6)捆绑服务器的指定端口到套接字。
7)设置等待网络事件的套接字。
8)调用select()函数等待网络事件。
9)根据返回的可读套接字进行相应操作,如果是使用TCP的监听套接字,则接受连接,)根据返回的可读套接字进行相应操作,如果是使用TCP的监听套接字,则接受连接,
10)回到步骤8)。
11)如果终止条件到,则关闭套接字,释放资源,终止程序。

四、程序运行简介

在IO复用模型下,套接字以阻塞模式运行,但是仍然可以用单个线程达到多线程并发执行的效果,以上代码用select)函数对一一个监听套接字、 多个连接套接字和一个数据报套接字上等待的网络事件进行同时监控,并在任何满足I0条件的套接字返回时,根据套接字的类型分别进行处理。

五、结果图

Socket基础八:网络IO模型的应用相关推荐

  1. 大白话详解5种网络IO模型

    1 前言 我们都知道,为了实现高性能的通信服务器,BIO在高并发的情况下会出现性能急剧下降的问题,甚至会由于创建过多线程而导致系统OOM.因此在Java业界,BIO的性能问题一直被开发者所诟病,所幸的 ...

  2. Linux 网络 IO 模型

    写在前面 本文主要介绍 Unix/Linux 下五种网络 IO 模型,但是.为了更好的理解下面提到的五种网络 IO 的概念,我们有必要先理清下面这几个概念. 用户空间与内核空间 一个计算机通常有一定大 ...

  3. python 网络编程 异步io_python网络编程——网络IO模型

    服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking IO):默认创建的s ...

  4. 网络编程(三):Linux 网络IO模型、select、pool、epoll 内核设计

    Linux网络IO模型 同步和异步,阻塞和非阻塞 同步和异步 关注的是调用方是否主动获取结果 同步: 同步的意思就是调用方需要主动等待结果的返回 异步: 异步的意思就是不需要主动等待结果的返回,而是通 ...

  5. 5种网络IO模型介绍

    5种网络IO模型介绍 IO 模型分为以下几种: 阻塞IO 非阻塞IO 信号驱动IO IO多路复用 异步IO 前四个为同步IO 1 阻塞IO 一个IO操作需要两步: 等待数据和拷贝数据. blockin ...

  6. linux 网络io命令详解,Linux下五种网络IO模型详解

    本文我们主要来了解一下Unix/Linux下5种网络IO模型:blocking IO, nonblocking IO, IO multiplexing, signal driven IO, async ...

  7. 网络模型——四种常见网络IO模型

    文章目录 1.IO读写原理 1.1 内核缓冲区和进程缓存区 1.1.1 用户进程和操作系统 1.1.2 缓冲区的目的 1.2 Java读写IO底层流程 2.四种主要的IO模型 2.1 基本概念 2.1 ...

  8. SWOOLE进阶-06网络IO模型-阻塞模型

    前言 接着咱们前面swoole系列第五篇文章,系统在处理一些事情的时候,有的选择进程处理,有的选择线程处理,至于怎么选择是根据平台和编程语言来决定的.接下来我们需要理解什么是网络IO模型? strea ...

  9. mysql 网络io_如何在MySQL源码中看其网络IO模型

    前言 MySQL是当今最流行的开源数据库,阅读其源码是一件大有裨益的事情(虽然其代码感觉比较凌乱).而笔者阅读一个Server源码的习惯就是先从其网络IO模型看起.于是,便有了本篇博客. MySQL启 ...

最新文章

  1. [功能改进]防止提交重复评论内容
  2. oracle dbms overflow,Oracle DBA课程系列笔记(12_1)
  3. [html] 说说你对html中的置换元素和非置换元素的理解
  4. ajax success返回 .net,asp.net-mvc-返回JsonResult的ASP.Net MVC Ajax调用
  5. 关于matlab的问题,关于MATLAB的一些基础问题
  6. C++与Python混合编程
  7. Mac IDEA 实用快捷键大全(持续更新)
  8. 运用现代信息技术 推进环评大数据建设
  9. word使用 通配符替换中文汉字
  10. Postman强大的接口的前置、后置处理教程
  11. WidsMob Denoise如何使用?WidsMob Denoise图片降噪教程
  12. 强化学习论文分析3---蜂窝网络联合频谱和功率分配的深度强化学习--《Deep Reinforcement Learning for ......》
  13. 【Travis CI使用教程】如何让定制你的travis.yml配置文件
  14. 编写SQL语句,从Orders表中检索顾客ID(cust_id)和订单号(order_num),并先按顾客ID对结果进行排序,再按订单日期倒序排列
  15. matlab silhouette函数,相当于Matlab的聚类质量函数?
  16. 【P07】DIY推荐:OPA604高电压耳放
  17. 智能优化算法——灰狼优化算法(PythonMatlab实现)
  18. 计算机一级读取存储器,计算机一级MsOffice ​选择题
  19. Three.js心脏在线预览(次时代模型)
  20. 爬取爱套图网上的图片

热门文章

  1. w7运行里的计算机怎么设置,W7系统怎么设置开机启动项
  2. C++一本通1086(角谷猜想)
  3. 新媒体运营教程:策划一场成功漂亮的活动策划
  4. cocos做飞机大战笔记【玩家飞机移动与子弹发射】
  5. 计算机三级网络技术知识点大全(一)
  6. 安卓UI自动化工具4399AT环境搭建
  7. 网络虚拟化——SR-IOV
  8. 外挂、破解软件理论与实战
  9. slack 使用说明_我如何使用Slack作为自己的个人助理
  10. nginx.conf配置文件说明