使用 ()+) 协 议的 应用程序通 常采 用应 用编 程接 口: 0+12 3 的套接字( ) 和 0+1
456 的 (7+(已经被淘汰),来实现网络进程之间的通信。就目前而言,几乎所有的应用程序都是采
用 ,而现在又是网络时代,网络中进程通信是无处不在,这就是我为什么说“一切皆 8。
2、什么是 Socket?
上面我们已经知道网络中的进程是通过 来通信的,那什么是 呢? 起源于 09,而
097.9 基本哲学之一就是“一切皆文件”,都可以用“打开 :;读写 :;关闭 8
模式来操作。我的理解就是 就是该模式的一个实现, 即是一种特殊的文件,一些
函数就是对其进行的操作(读写 +-、打开、关闭),这些函数我们在后面进行介绍。
socket 一词的起源
在组网领域的首次使用是 在 1970 年 2 月 12 日发布的文献 IETF RFC33 中发 现的,撰写者为
Stephen Carr、Steve Crocker 和 Vint Cerf。根据美国计算机历史博物馆的记载,Croker 写道:
“命名空间的元素都可称为套接字接口。一个套接字接口构成一个连接的一端,而一个连接可完全由一
对套接字接口规定。”计算机历史博物馆补充道:“这比 BSD 的套接字接口定义早了大约 12 年。”
3、socket 的基本操作
既然 是“ 8模式的一种实现,那么 就提供了这些操作对应的函数
接口。下面以 () 为例,介绍几个基本的 接口函数。
3.1、socket()函数
int socket(int domain, int type, int protocol);
函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而 socket()用于创建
一个 描述符(),它唯一标识一个 。这个 描述字跟文件描述字
一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。
正如可以给 < 的传入不同参数值,以打开不同的文件。创建 的时候,也可以指定不同的参数创
建不同的 描述符, 函数的三个参数分别为:
5:即协议域,又称为协议族(<54)。常用的协议族
有,=,>+?(、=,>+?(、=,>7-=7(或称 =,>0+1,09 域 )、=,>/-0(?
等等。协议族决定了 的地址类型,在通信中必须采用对应的地址,如 =,>+?( 决定了要用
& 地址(#" 位的)与端口号( 位的)的组合、=,>0+1 决定了要用一个绝对路径名作为地
址。
4:指定 类型。常用的 类型
有,-@>(/?=A、-@>B/=A、-@>/=C、-@>)=@?(、-@>?!)=@?( 等等
( 的类型有哪些?)。
:故名思意,就是指定协议。常用的协议
有,+))/-(->()、+))(-(->0)、+))/-(->()、+))/-(->(+) 等,它们分别对
应 () 传输协议、0) 传输协议、() 传输协议、(+) 传输协议(这个协议我将会单独开篇讨
论!)。
注意:并不是上面的 4 和 可以随意组合的,如 -@>(/?=A 不可以跟 +))/-(->0)
组合。当 为 D 时,会自动选择 4 类型对应的默认协议。
当我们调用 socket 创建一个 时,返回的 描述字它存在于协议族(
<54,=,>111)空间中,但没有一个具体的地址。如果想要给它赋值一个地址,就必须调用 $%函
数,否则就当调用 $%、$%时系统会自动随机分配一个端口。
评论0
最新资源