Windows和Linux网络编程提要

Windows和Linux网络编程提要

一、socket的模式

socket一般有两种模式:同步和异步(有的书上不规范但概念都是一样的,比如windows网络编程技术中叫锁定和非锁定,Linux网络编程叫阻塞和非阻塞)

二、socket的类型

socket一般有三种类型,基于TCP的流式套接字,基于UDP的数据报套接字和原始套接字

三、socket的IO模型

socket的IO模型是编程中使用socket两种模式的策略,它们适用的场合不同,在不同的操作系统上支持的模型也不同,例如windows从NT版本才开始支持完成端口模型。Linux和Windows所支持的模型也有区别,当然也有相同的地方,可能叫法不一样,但大致思路是一样的,下面分别介绍windows和Linux的IO模型

1、  Windows下的套接字IO模型:

A、 Select(选择)模型

用于同步socket的状态检测模型,又叫(Linux)多路复用,可以同时检测多个socket的状态

B、  WSAAsyncSelect(异步选择)模型

用于异步socket的异步事件设置,它是基于Windows消息的模型,必须先打开一个窗口,然后把窗口和socket的消息绑定,这样,在socket有消息通知时,操作系统便通知窗口,然后在窗口进行处理。

C、  WSAEventSelect(异步事件)模型

用于异步socket的异步事件,它是基于网络事件的模型,先使用CreateEvent创建一个事件,然后使用WSAEventSelect进行事件绑定,然后可以使用WaitForMultipleObject(Event)进行事件监听,可以同时监听多个事件,不光是socket的,比如可以监听使用CreateWaitableTimer创建的Timer等。

D、  重叠IO模型

用于异步socket,在创建socket时需要在创建函数WSASocket中使用WSA_FLAG_OVERLAPPED标志,然后在投递IO请求的时候将一个Overlapped结构体指针赋给投递函数,可以使用WSAWaitForMultipleObject来监听事件,然后使用WSAGetOverlappedResult来获取IO的状态,也可以在Overlapped结构体中使用完成例程来处理,即在投递函数中把完成例程赋给投递函数。

E、  完成端口模型

它是迄今为止最复杂的一种IO模型,当应用程序需要管理众多的套接字并且希望随着系统内安装的CPU数目的增多,应用程序的性能也可以线性增加,就可以使用这种模型,它的原理是每个CPU可以单独负责一个线程的执行,避免线程的频繁切换。使用这种模型往往可以达到最佳的系统性能。

首先需要使用CreateIOCompletePort来创建完成端口,然后将IO句柄和此端口绑定,绑定也是使用此函数,当然也可以一次完成。接着是创建工作者线程,工作者线程会使用GetQueuedCompletionStatus进入完成端口维护的线程池,当有完成事件时,会激活一个线程。

2、  Linux下的IO模型

A、阻塞IO

B、非阻塞IO

C、IO多路复用(选择)

D、信号驱动

用于异步socket,首先设定信号处理函数,然后使用fcntl函数设定socket的拥有者,像windows下使用WSAAsncSelect设定socket的窗口一样。使用这种模型,当内核操作可以被操作的时候通知我们的应用程序

E、异步IO

   当内核在所有操作完成后才会通知应用程序

四、socket的一些使用上的优化

A、缓冲区的优化,可以考虑让应用程序使用比较小的缓冲区,但同时使用多个WSARecv

B、使用socket选项SO_SNDBUF和SO_RCVBUF设置socket缓冲区大小,如果设为0,操作体系统会使用应用程序的缓冲区,这样避免了从系统缓冲区向用户区复制的开销

五、注意这些IO模型有些不光是针对socket的,其他的IO操作也可以使用,最常用使用的是WriteFile,ReadFile等函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值