《windows网络编程》--->套接字(I/O)模式 介绍及其选择

windows 网络编程 几种套接字模型 上面这些模型区别主要是一下几个方面   如何监控socket的变化   如何通知socket的变化   1.select  :       应用场合:主要面向的是某些使用U n i x操作系统的计算机,它们采用的是B e r k e l e y套接字方案。s e l e c t模型已集成到Winsock 1.1中,它                       使那些想避免在套接字调用 阅读详情

《windows网络编程》 8.1 8.2笔记
概况
一:Socket套接字模式
   1:锁定(阻塞)模式
     优点:操作简单
  缺点:为了与建立连接的套接字通信 必须为每个套接字分配一个线程
       虽然可行,但开销极大,拓展性极差,以后想同时处理大量套接
    字时,难以下手
   2:非锁定(非阻塞)模式
     缺点:稍有难度
  优点:排除困难后,功能强大,

套接字创建之后默认为锁定模式 可通过如下方式修改为非锁定模式
  if ( ioctlsocket(m_ServerSocket,FIONBIO,&uSocketIoMode) == SOCKET_ERROR  )
  ...
 

 

二:套接字I/0模型
   1:Select模型
   2:WSAAsyncSelect模型
   3:WSAEventSelect模型
   4:重叠模型
   5:完成端口模型


三:I/0模型的选择    -->一下为windows网络编程的建议
针对服务器和客户机建议如下
  1:若开发一个客户机应用,令其同时管理一个或多个套接字,建议采用重叠I/0或WSAEventSelect模型(性能)
  2:若依Windows为基础的应用程序,要进行窗口消息处理,那么WSAAsyncSelect模型是最好的选择
    理由:因为 WSAAsyncSelect 本身便是从Windows消息模型借鉴来的。若采用这种模型,一开始
 便具备了处理消息的能力

A:客户机开发
B:服务器开发
  1:要在一个给定的时间,同时控制几个套接字,建议采用重叠I/0模型,从性能出发点考虑的
  2:任何给定的时间,都会为大量I/0请求提供服务,便应考虑使用I/0完成端口模型,获得更好的性能

 


其他小结
关于FD_WRITE
1调用connect或WSAConnect,一个套接字首次建立了连接
2:使用accept 或WSAAccept,套接字被接受以后
3:若send,WSASend,sendto或WSASendTo操作失败,返回了WSAEWOULDBLOCK错误,而且缓冲区的空间变得可用

只有如上三种情况FD_WRITE通知才会到达

关于WSAEWOULDBLOCK错误
在非阻塞模式下 Winsock API调用会理解返回 大多数情况下 这些调用都会"失败",并返回
一个WSAEWOULDBLOCK错误,意思就是 请求的操作在调用期间没有时间完成,举例如下
假如在系统的输入缓冲区中,尚不存在"需要解决"的数据,那么recv调用就会返回该错误
总结如下

 

关于shutdown


我的理解是
1   WSAAsyncSelect应该注册FD_CLOSE事件
2   然后客户端FD_CLOSE事件中调用shutdown(XX,SD_SEND);不在向服务端发送数据  然后紧接closetsocket(socket)
3 在服务端处理数据知道返回0或者返回错误SOCKET_ERROR就退出接收

4   服务端 closetsocket(socket)
如《TCP-IP详解.卷二:实现》中的一张图如下

 

 

突破编程_C++_网络编程Windows 套接字(阻塞模式与非阻塞模式)) C++ 网络编程Windows 套接字(阻塞模式与非阻塞模式 阅读详情

相关推荐

Windows Socket五种I/O模型——代码全攻略

如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的。Windows操作系统提供了选择(Select)、异步选择(WSAAsyncSelect)、事件选择(WSAEventSelect)、重叠I/O(Overlapped I/O)和完成端口(Completion Port)共五种I/O模型。每一种模型均适用于一种特定的应用场景。程序员应该对自己的应用需求非常明确,而且综合考虑

mlite的专栏 2万+

基于Windows套接字网络编程(MFC)

从CSocket编程模型知道,服务器端需要两种套接字,一个用来侦听连接请求,一个用来与请求连接的套接字建立连接。因此,利用类向导为程序添加两个CSocket和。下面在套接字类里加入对话框类信息。1然后在两个套接字类里添加公有对话框类指针数据成员m_Dlg2首先类似服务器端添加一个套接字类,并添加对话框变量及其相应构造。类似这个问题是由于派生了套接字类并连接了对话框类导致的,引入工程文件的头文件即可解决问题。

m0_61219098的博客 2640

WinSock三种选择I/O模型

在《套接字socket及C/S通信的基本概念》和《WinSock编程基础》中,我们介绍套接字的基本概念和WinSock API的基本调用规范。我们讨论了阻塞模式/非阻塞模式和同步I/O和异步I/O等话题。 从概念的角度,阻塞模式因其简洁易用便于快速原型化,但在应付建立连接的多个套接字或在数据的收发量不均、时间不定时却极难管理。另一方面,我们需要对非阻塞模式套接字的 WinSock API调用频

老杨的专栏 1267

winsocket编程几种模式(1)

Winsock的I/O操作: 1、两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序。套接字默认为阻塞模式。可以通过多线程技术进行处理。 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权。这种模式使用起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回WSAEWOULDBLOCK错误。但功能强大。为了解决这个问题,提出了进

shejiannan的专栏 1433

Windows套接字

一、套接字 windows套接字Socket是进程通信的一种方式,可以实现在不同主机的相关进程之间交换数据。在TCP/IP网络应用中,通信的两个进程的主要模式是客户/服务器(C/S)模式,即客户向服务器发出请求,服务器接受到请求后,提供相应的服务。 二、套接字函数 1. 创建套接字 socket 2. 绑定本地地址 bind 3. 监听连接 listen 4. 建立套接字连接 connect 与 accept 5. 数据传输 send 与 recv 6. 关闭套...

ypy_datou的专栏 2430

Windows套接字I/O模型之套接字模式

先来说一下为什么需要I/O模型,要解释这个问题,首先我们得了解一下套接字模式,那么什么是套接字模式套接字模式显得有点太专业了,让人生畏,我们就来通俗一点的解释一下什么是套接字模式模式,顾名思义就是运转的方式,所以,套接字模式就可以通俗的理解为套接字运作的方式,那套接字运作的方式都有什么呢?下面给出了WinSock下的套接字模式套接字运作方式): 1、阻塞模式(阻塞的运作方式) 套接字在创

MessCodes 1383

Winsock网络编程套接字I/O模型之选择模型

Winsock 提供了一些 I/O 模型帮助应用程序以异步方式在一个或者多个套接字上管理 I/O。

weixin_43446169的博客 1311

Windows网络编程-之五-套接字选项和I/O控制

1      套接字选项和I/O控制 1.1     套接字选项 intgetsockopt(  SOCKET s,  int level, int optname,  char* optval,  int* optlen ); intsetsockopt(  SOCKET s,  int level, int optname,  const char* optval,  int optle

edisonlg的专栏 2710

网络编程——重叠I/O模型

参考 《TCP/IP网络编程》 尹圣雨 重叠I/O模型 理解重叠I/O模型 同一线程内部向多个目标传输(或从多个目标接收)数据引起的I/O重叠现象称为“重叠I/O”。为了完成这项任务,调用的I/O函数应立即返回,因此前提条件是异步I/O。而且,为了完成异步I/O,调用的I/O函数应以非阻塞模式工作 Windows中重叠I/O的重点并非I/O本身,而是如何确认I/O完成时的状态 创建重叠I/O套接字 #include <winsock2.h> SOCKET WSASocket(int af,

beilizhang的博客 3470

Windows网络编程-I/O模式

首先说明什么是Windows套接字模式. 其分为两类:阻塞模式/非阻塞模式. 阻塞模式:I/O操作完成前执行操作的WinSock调用会一直等候下去,不会立即返回到程序中. 非阻塞模式:WinSock函数无论如何都会立即返回. 对阻塞套接字 他的一个缺点在于,应用程序很难同时通过多个建好连接的套接字通信,使用前述的方案,可对应用程序进行修改,令其为连接好的每个套接字都分配一个读线程,以及一个数据处理...

zhenpeanut的博客 508

Windows下异步I/O机制IOCP介绍

输入输出完成端口(Input/Output Completion Port,IOCP), 是Windows下支持多个同时发生的异步I/O操作的应用程序编程接口,用于解决网络编程中的连接建立、连接断开、数据发送和数据接收四个问题。下面从几个问题来解释iocp。

qq_32634339的博客 1437

网络编程】同步和异步、阻塞和非阻塞,I/O和网络I/O

对于多个线程而言,同步、异步就是线程间的步调是否要一致、是否要协调:要协调线程 之间的执行时机就是线程同步,否则就是异步。对于一个线程的请求调用来讲,同步和异步的区别是是否要等这个请求出最终结果(注意, 不是请求的响应,是提交的请求最终得到的结果)。如果要等最终结果,就是同步;如果不等, 干其他无关事情了,就是异步。

Antonio915的博客 1188

Winsock网络编程套接字I/O模型之WSAAsyncSelect模型

为什么实现了异步管理连接的套接字:通过使用异步函数WSAAsyncSelect,服务器可以注册网络事件的通知。当网络事件发生时,操作系统会通知服务器,从而避免了阻塞在单个连接的recv函数上,服务器可以继续接收其他连接请求,而无需等待上一个连接上的网络事件完成,也不需要创建多线程处理这些连接。缺点:用单个线程的消息队列管理大规模的客户端连接产生的不同网络事件,可能会导致消息队列中事件排队等待时间变长。

weixin_43446169的博客 843

Windows环境下的Socket I/O模型实战演练

介绍各种I/O模型之前,理解阻塞I/O是基础,因为在传统编程中,它是最直接和常见的处理I/O的方式。阻塞I/O模型(Blocking I/O)是指在进行I/O操作时,应用程序需等待操作完成,期间不能执行其他任务,从而导致CPU时间片的浪费。下面的示例将展示如何使用阻塞I/O模型进行文件读取。return -1;return 0;在这个例子中,我们打开一个文件并尝试读取数据。如果文件很大,程序会一直等到读取操作完成才继续执行,这便是阻塞I/O行为。

weixin_35794316的博客 816

Windows套接字I/O模型

Winsock简介 Winsock是一种标准的API,主要用于网络中的数据通信。 1. Winsock头文件及库文件 在编译采用Winsock2.h的应用程序必须链接到WS2_32.lib库。 2. Winsock初始化 每个Winsock应用都必须加载合适的Winsock dll版本,如果调用一个Winsock函数之前没有加载Winsock库,这个函数就会返回一个socket_error。 加载...

jing_nnn的博客 629

网络编程套接字基础

Windows用户态的网络编程常见的应用主要基于套接字API。套 接 字APIWindows提 供的一组网络编程接口。通过它,开发人员既可以在传输层之上进行网络编程,也可以跨越传 输层直接对网络层进行开发。套接字 API 已经是用户态网络编程必须要掌握的内容。套接字 编程可以分为TCP 套接字编程、UDP 套接字编程和原始套接字编程,我们将在后面章节分别 叙述之。

Antonio915的博客 1035

深入理解Windows Socket I/O模型:从基础到高性能网络编程

Socket是一种网络通信的抽象概念,它提供了一种在网络中进行数据传输的机制。Windows Socket I/O模型是操作系统提供的网络通信管理机制如何检测Socket可读/可写状态如何避免线程阻塞等待如何高效管理大量并发连接

和舒貌的博客 1564
上一篇: 枚举所有Windows所有窗口句柄并在Ctreelist控件显示
下一篇: Windows网络编程 の 原始套接字学习笔记ICMP
cmdhack
博客等级 码龄19年 20粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值