SOCKET类的设计和实现

SOCKET类的设计和实现

  1. WinSock基本知识

    这里不打算系统地介绍socket或者WinSock的知识。首先介绍WinSock API函数,讲解阻塞/非阻塞的概念;然后介绍socket的使用。

    1. WinSock API

      Socket接口是网络编程(通常是TCP/IP协议,也可以是其他协议)的API。最早的Socket接口是Berkeley接口,在Unxi操作系统中实现。WinSock也是一个基于Socket模型的API,在Microsoft Windows操作系统类中使用。它在Berkeley接口函数的基础之上,还增加了基于消息驱动机制的Windows扩展函数。Winscok1.1只支持TCP/IP网络,WinSock2.0增加了对更多协议的支持。这里,讨论TCP/IP网络上的API。

      Socket接口包括三类函数:

      第一类是WinSock API包含的Berkeley socket函数。这类函数分两部分。第一部分是用于网络I/O的函数,如

      accept、Closesocket、connect、recv、recvfrom、Select、Send、Sendto

      另一部分是不涉及网络I/O、在本地端完成的函数,如

      bind、getpeername、getsockname、getsocketopt、htonl、htons、inet_addr、inet_nton

      ioctlsocket、listen、ntohl、ntohs、setsocketopt、shutdow、socket等

      第二类是检索有关域名、通信服务和协议等Internet信息的数据库函数,如

      gethostbyaddr、gethostbyname、gethostname、getprotolbyname

      getprotolbynumber、getserverbyname、getservbyport。

      第三类是Berkekley socket例程的Windows专用的扩展函数,如gethostbyname对应的WSAAsynGetHostByName(其他数据库函数除了gethostname都有异步版本),select对应的WSAAsynSelect,判断是否阻塞的函数WSAIsBlocking,得到上一次Windsock API错误信息的WSAGetLastError,等等。

      从另外一个角度,这些函数又可以分为两类,一是阻塞函数,一是非阻塞函数。所谓阻塞函数,是指其完成指定的任务之前不允许程序调用另一个函数,在Windows下还会阻塞本线程消息的发送。所谓非阻塞函数,是指操作启动之后,如果可以立即得到结果就返回结果,否则返回表示结果需要等待的错误信息,不等待任务完成函数就返回。

      首先,异步函数是非阻塞函数;

      其次,获取远地信息的数据库函数是阻塞函数(因此,WinSock提供了其异步版本);

      在Berkeley socket函数部分中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值