其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
SOCKET类的设计和实现

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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函数部分中




相关文章

相关软件