套接字API在C/S软件开发中的意义与使用

时间:2022-04-22 08:06:58

套接字API在C/S软件开发中的意义与使用

由于许多计算机厂商,特别是像Sun Microsystem、Tektro-nix以及Digital这样的工作站制造商,采用了Berkeley UNIX,于是在许多机器上都可以使用套接字接口。这样,套接字接口就已广泛采用,以至于成为事实上的标准。微软也接受了这个标准,并为其操作系统开发了一个相应的实现版本。除此之外,Linux也使用了套接字。

【关键词】协议接口 套接字 数据结构

1 协议接口的说明

在应用程序能访问TCP/IP协议软件时,我们必须为函数定义名字,且说明每个函数所带的参数。因此,必须要确定每一个函数所作用的服务范围和应用进程使用它们的方式。我们还要考虑这个接口是否只针对TCP/IP还是其他都可以使用。所以,我们必须在下列两个方法中选择一个:

(1)专门支持TCP/IP通信。

(2)支持一般网络通信函数,用参数使TCP/IP通信作为特例。

由于套接字的设计及通用性一直存在议论。所以除非有源代码,套接字是不能加到操作系统中,而源代码往往是需要许可证以及相关的费用。

2 针对套接字的系统数据结构

了解操作系统中的数据结构是理解套接字抽象的最简单的方法。当应用进程调用socket后,操作系统就分配一个新的数据结构以便保存通信所需的信息,并在文件描述符表中填入了一个新的条目,该条目含有指向这个数据结构的指针。

虽然针对套接字的内部数据结构中有许多字段,但是在系统创建套接字以后,大多数字段中的值却并没有填上。在套接字能够被使用前,创建该套接字的应用程序必须用其他系统调把套接字数据结构中的这些信息填上。

只要套接字一被创建,应用程序必须指定如何使用这个套接字,它本身是完全通用的,是可以用来进行任意方式的通信。若服务器将套接字配置为等待传入连接,就称之为被动套接字;相反的,客户用来发起连接的套接字的,就称之为主动套接字。其要点是:主动套接字和被动套接字的惟一不同在于应用使用它们的方式;两种套接字最初的创建方式是相同的。

3 确定端点地址

在套接字创建时,并没有说明如何使用这个套接字的信息。也就是说,套接字并没有包含本地或者是远程机器的协议端口号或是IP地址等任何信息。在应用进程使用套接字前,它必须指明这些地址中的一个或者两个都指明。

其实,TCP/IP协议族和它所使用的地址族会引起很大的混淆。主要的问题是这两个符号常量都有相同的数字值“2”,所以,在程序中,在本应使用某一个常量的时候却不慎用了另一个,而程序却能正确运作。我们应该特别注意到这个区别,这有助于澄清变量的意义并使程序更易移植。

4 类属地址结构

某些软件要使用协议地址,但它们不知道每种协议族定义其地址表示的细节。为了适合某些程序,套接字系统定义了一般化的格式,它可以为所有端点地址使用。这种一般化的格式构成是:(地址族,该族中的端点地址)。在地址族字段中包含一个常量,它表示预定的地址类型。端点地址字段包含有端点地址,它使用地址族所指明的那种地址类型的标准表示方式。

其实,套接字软件为地址端点提供了预定的C结构的声明。应用程序在需要声明存储端口地址的变量时,或要使用某种重叠来覆盖结构中的某个字段时,就要使用这种预定义的结构。

使用套接字的每个协议族都精确地定义了它的端点地址,套接字字软件还提供了相应的结构声明。每个TCP/IP端点地址由几安段构成,它们分别是:一个用来识别地址类型的2字节字段(必须包含AF_INET),一个2字节的端口号(port number)字段,一个4字节的IP地址字段,一个还未使用的8字节字段。

所以综合上述,当表示一个TCP/IP通信端点时,应用程序使用结构SOCKADDR_IN,该结构包含了IP地址和协议端口号。在编写使用混合协议的程序时,我们一定要注意,因为有些非TCP/IP的端点地址要求一个更大的结构。

5 套接字API中的系统调用

套接字调用可以分为两组:主调用,它提供对下层功能的访问;实用例程,为程序员提供帮助。其中,套接字系统调用的细节、参数及其语义都是不可避免的。因为套接字带有一些参数,这些参数允许程序以许多方式使用它们。套接字可以被客户或服务器使用,可以使用流传送(TCP)通信或使用数据报(UDP)通信,可以使用特定的远程端点地址(往往为客户所使用)或使用非特定的远程端点地址(往往为服务器所用)。表5-1中给出了与套接字有关的系统函数及含义。

6 小结

BSD UNIX引入了作为一种机制的套接字抽象,它允许应用程序与操作系统中的协议软件接口。由于许多厂家采纳了套接字,套接字接口已成为了一种事实上的标准。套接字结构允许每个协议族定义一个或多个地址表示方式。而用C语言写的应用程序在能够使用那些与套接字相关的预定义的结构和常量之前,必须包含一些定义这些结构和常量的文件。

参考文献

[1]张合权,周政.基于消息的异步套接字实现[J].软件导刊,2008,7(8):2223.

[2]多纳霍,卡尔弗特.TCP/IP Sockets编程[M].北京:清华大学出版社,2009(11):1.

[3]史蒂文斯.UNIX网络编程卷1:套接字联网API[M].北京:人民邮电出版社,2010(07):1.

[4]赵毅.跨平台程序设计语言―Java[M]. 西安:西安电子科技大学出版社,2006.

作者单位

1.浙江农业商贸职业学院 浙江省绍兴市 312000

2.绍兴科技馆 浙江省绍兴市 312000

上一篇:CAD在机械制图中的应用分析 下一篇:基于Struts2的MVC模式在高校科研管理系统中的...