套接口编程技术.doc

上传人:公**** 文档编号:551327983 上传时间:2023-02-22 格式:DOC 页数:6 大小:62.50KB
返回 下载 相关 举报
套接口编程技术.doc_第1页
第1页 / 共6页
套接口编程技术.doc_第2页
第2页 / 共6页
套接口编程技术.doc_第3页
第3页 / 共6页
套接口编程技术.doc_第4页
第4页 / 共6页
套接口编程技术.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《套接口编程技术.doc》由会员分享,可在线阅读,更多相关《套接口编程技术.doc(6页珍藏版)》请在金锄头文库上搜索。

1、一Socket和Win-Socket基础Socket和Win-Socket的中译名为套接口或视窗套接口。Socket和Win-Socket是一种基于TCP/IP(V4)协议(如下图)族中第四层TCP协议和UDP协议的软件接口技术标准。SMTPDNSNSPFTPTELNETTCPUDPNVPICMPIPARPRARPEthernetARPANETPDNOthers传输控制协议(Transmission Control ProtocolTCP)是TCP/IP(V4)协议族中面向(虚电路)连接的传输层协议。用户数据报协议(User Datagram ProtocolUDP)是TCP/IP(V4)协议

2、族中面向无连接的传输层协议。TCP/IP(V4)传输层的各子协议是以16位二进数的端口号作为本层的识别地址。该层的连接便是建立在两个不同IP(V4)地址所拥有的端口号之间的。32位的IP(V4)地址与16位的端口号联合构成的涉及两层协议地址的描述体被称为套接口(Socket)。在一个特定的IP(V4)地址上可以配置多个传输层协议端口号,从而构成了一个站点可拥有多个套接口的情景(如下图)。这与一个网络设备(如网卡、Modem等)只能有一个IP(V4)地址的第三层协议形成了鲜明的对照。供软件访问的Socket接口技术标准是由Berkeley分校在参与研究TCP/IP(V4)协议时推出的,称为Soc

3、ket API For UNIX。鉴于UNIX操作系统是用C语言写成的,故Socket API For UNIX也是以一组C库函数的形式提供给程序员使用的。全部Socket API For UNIX的C库函数按功能的不同可分为三类:网络访问类(如connect、accept、recv、send、closesocket 、listen、shutdown等)、网络信息获取类(gethostbyaddr、getsocketname、getserverbyname等)和通信状态监测类(如select、getlasterror等)。根据运行时的形态,上述库函数又可分为阻塞型(Blocking)和非阻塞型

4、两类(Non blocking)。若被访问的一个Socket API库函数在执行后立即给出结果并返回,则称为阻塞型函数。若被访问的一个Socket API库函数在执行后(有结果则给出)不能立即给出结果,为了不延误其他进程的执行而先返回一个表示等待的“错误”码后返回,则称为非阻塞型函数。在多数情况下,用于实现无连接访问的Socket API库函数都是阻塞型的,而用于实现有连接访问的Socket API库函数都是非阻塞型的。(嵌入的中断服务程序)Microsoft的MFC只是继承了大部分Berkeley的Socket API的第一类和第三类库函数并使之实现对象化罢了。由于Berkeley的Sock

5、et API库函数的目标代码所构建的进程结构与Microsoft的文档-视结构在运行时的形态完全不同,因而Microsoft只得再推出一个能同时与两者通信的中间进程软件接口(如下图)。将该中间进程的软件接口与Berkeley的Socket API接口合为一体便是被人们广泛称为的视窗套接口技术标准(Win-Socket)。因此,使用MFC的Win-Socket必须要做两件事:构造一个兼容文档-视结构的Windows Socket对象;利用该对象再构造一个与之相连接的Berkeley Socket对象(只能一对一)。真正的网络通信由Berkeley Socket对象实现,而Windows Sock

6、et对象则负责应用程序的文档-视和Berkeley Socket对象间的进程通信工作。正因为如此,并非Berkeley Socket API接口的全部函数都能通过Windows Socket对象实现与文档-视对象的沟通。由于在一个站点上可能存在多个Windows Socket对象及其Berkeley Socket对象,而且这些对象的析构也可以不同步的,所以Windwos操作系统为每个现役的Berkeley Socket对象安排一个唯一的整数标识(句柄)以便Windows Socket对象可以灵活地与其相关联(即可以动态变更)。二应用Win-Socket编程的基本套路MFC中的CASyncSoc

7、ket类就是Win-Socket的对象的抽象结构。由于使用该类编程的程序员必须具有一定的网络技术(理论)基础背景,MFC又由此类派生出了一个CSocket类,并依托对象延续技术(即CArchive-CSocketFile的结构)以便于网络技术(理论)基础背景较弱的程序员使用(但编程量是前者的两倍以上)。为了避免与调试用机常用的FTP、Web、Proxy、telent等服务器默认端口的重叠,端口号最好选择100以上的非特征数值。应用CASyncSocket类的编程套路构造CASyncSocket类的默认对象(适用于服务器和客户机两者)即创建出一个Windows Socket对象。构造Socket

8、对象(适用于服务器和客户机两者)即创建出一个Berkeley Socket对象,同时将其与Windows Socket对象关联。可有两种方法:在客户机和服务器各自用Create成员函数创建出一个本地的Berkeley Socket对象并完成与Windows Socket的关联;在服务器一侧先用Accept成员函数在响应客户机一侧的连接请求后立即建构出另一个能够识别对方的本地的Berkeley Socket对象并在此基础上用Attach(和Detach)成员函数完成与Windows Socket的关联;重写非阻塞型的CASyncSocket派生类的响应成员函数凡是要用到的非阻塞型成员函数(以On

9、为前缀,如OnSend、OnReceive、OnAccept等)都必须重写并插入编码。因此,建议用ClassWizard在建构工程时就插入CASyncSocket派生类。进行正常的网络通信可参与通信的成员函数有:Send、Receive、SendTo、ReceiveFrom等。结束网络通信即析构Windows Socket对象的同时也会自动将与之相关联的Berkeley Socket对象析构掉。如果只是要析构Berkeley Socket对象可以用Close成员函数。应用CSocket类的编程套路构造CSocket类的默认对象(适用于服务器和客户机两者)在文档对象类中构造CSocket类的默认

10、对象,同时指定套接口的端口号。构造CArchive和CSockFile类对象并实现其相互关联若是在客户机一侧,该过程可以与上一过程合并。而在服务器一侧则要安排在CSocket派生类中重载的OnAccept成员函数内实现。即利用一个本地的Windows Socket对象而在响应连接请求时获得了另一个能够识别对方的本地Berkeley Socket对象,并在OnAccept成员函数内再创建一个Windows Socket对象(借助对象延续技术)与其关联。重写非阻塞型的CSocket派生类的响应成员函数该过程与设计非阻塞型的CASyncSocket派生类的响应成员函数完全一致,但可以重写的成员函数的数量较少(如OnSend、OnReceive等)。进行正常的网络通信由于Csocket是借助CArchive的输入输出来实现网络通信的,所以可直接对CArchive的对象实施操作。但若要使用Serialize成员函数的便利(即算符),则必须在工程内插入CObject的派生类并重载Serialize成员函数。结束网络通信在析构CArchive和CSockFile类对象后再析构CSocket类对象。5

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号