📅  最后修改于: 2020-11-05 04:49:32             🧑  作者: Mango
套接字允许在相同或不同机器上的两个不同进程之间进行通信。更准确地说,这是使用标准Unix文件描述符与其他计算机对话的一种方式。在Unix中,每个I / O操作都是通过写入或读取文件描述符来完成的。文件描述符只是与打开的文件关联的整数,可以是网络连接,文本文件,终端或其他内容。
对于程序员来说,套接字的外观和行为都非常类似于低级文件描述符。这是因为read()和write()之类的命令与套接字一起使用的方式与对文件和管道的处理方式相同。
套接字首先在2.1BSD中引入,然后在4.2BSD中完善为当前形式。现在,大多数最新的UNIX系统版本都提供了套接字功能。
客户端服务器应用程序框架中使用Unix套接字。服务器是根据客户端的请求执行某些功能的过程。大多数应用程序级协议(例如FTP,SMTP和POP3)都利用套接字在客户端和服务器之间建立连接,然后交换数据。
用户可以使用四种类型的插座。前两个是最常用的,而后两个则很少使用。
假定进程仅在相同类型的套接字之间进行通信,但是没有限制可以防止不同类型的套接字之间进行通信。
流套接字-保证在网络环境中的交付。如果通过流套接字发送三个项目“ A,B,C”,它们将以相同的顺序到达-“ A,B,C”。这些套接字使用TCP(传输控制协议)进行数据传输。如果无法传送,则发件人会收到错误指示。数据记录没有任何边界。
数据报套接字-无法保证在网络环境中的传递。它们是无连接的,因为您不需要像Stream Sockets中那样具有开放的连接-您可以使用目标信息构建数据包并将其发送出去。他们使用UDP(用户数据报协议)。
原始套接字( Raw Sockets) -这些套接字使用户可以访问支持套接字抽象的底层通信协议。这些套接字通常是面向数据报的,尽管它们的确切特性取决于协议提供的接口。原始套接字不适合一般用户使用;它们主要是为那些对开发新的通信协议感兴趣的人,或为获得对现有协议的一些更秘密的功能的访问者而提供的。
顺序数据包套接字-它们类似于流套接字,但保留记录边界。此接口仅作为网络系统(NS)套接字抽象的一部分提供,并且在大多数严肃的NS应用程序中非常重要。顺序数据包套接字允许用户通过编写原型头以及要发送的任何数据来操作数据包或一组数据包上的序列数据包协议(SPP)或Internet数据报协议(IDP)标头指定将与所有传出数据一起使用的默认标头,并允许用户接收传入数据包上的标头。
接下来的几章旨在增强基础知识,并在您可以使用socket编写Server和Client程序之前准备基础。如果您直接想要跳转以查看如何编写客户端和服务器程序,则可以这样做,但不建议这样做。强烈建议您在开始进行编程之前,逐步完成本章的开头几章,以奠定基础。