Socket是什么? - Socket编程

套接字允许两个不同的进程之间的通信相同的或不同的机器上。在Unix中,每个I/O操作都是由写入或读取一个文件描述符。文件描述符是一个打开的文件相关联的仅仅是一个整数,它可以是网络连接、一个文本文件中或一个终端,还可以是其他的东西。

对于程序员套接字看起来和行为很像一个较低水平的文件描述符。这是因为命令,例如read()和write()和套接字方式同样,他们做的文件和管道的工作。套接字和正常的文件描述符之间的差异发生在创建一个socket,并通过各种特殊的操作来控制一个套接字。

套接字是2.1BSD首次推出,其后细化到当前的形式-4.2BSD。套接字功能是现在目前大多数的UNIX系统版本。

哪里使用套接字?

使用Unix套接字在客户端服务器应用程序框架。一台服务器是一个过程,从客户端的请求负责完成一些功能。大部分的应用层协议,如FTP,SMTP和POP3使用套接字建立连接客户端和服务器之间,然后进行数据交换。

Socket 类型:

有四种类型可供用户使用的套接字。最常用的是前两个而最后两个很少被使用。

进程被推定为只有相同类型的套接字之间进行通信,但没有任何限制,防止不同类型的套接字之间的通信。

  • Stream Sockets: 在网络环境下的传递保证。如果您发送通过流套接字三个项目“A,B,C”,他们将在同一顺序到达 - “A,B,C”。这些套接字使用TCP(传输控制协议)进行数据传输。如果传递是不可能的,发送者会收到一个错误信号。数据记录没有任何界限​​。

  • Datagram Sockets: 传递在网络环境中是无法得到保证。他们是无连接的,因为并不需要有一个开放的流套接字连接 - 建立了一个数据包的目的地信息,并将其发送出去。他们使用UDP(用户数据报协议)。

  • Raw Sockets: 为用户提供访问底层通信协议支持套接字抽象的。这些套接字通常是面向数据报,但其确切的特点是依赖于该协议所提供的接口。原始套接字并不打算为广大用户,他们主要是针对那些热衷于开发新的通信协议或获得一些更深奥的设备,现有协议已提供。

  • Sequenced Packet Sockets: 它们是相似的流套接字,除了保留记录边界。此接口仅提供作为网络系统(NS)的套接字概念的一部分,并且是非常重要的,在最严重的NS应用。序列测定数据包套接字允许用户操作序列数据包协议(SPP)或互联网数据报协议(IDP)可以通过编写一个原型头沿与要被发送的所有数据,或者通过指定一个数据包或数据包的一组接头连接器上可以使用一个缺省的头部与所有传出的数据,允许用户接收传入的数据包的报头。

下一步学习什么?

在接下来的几章中,将使用使用套接字写一个服务器和客户端作为示例。如果直接想要跳转看如何编写一个客户端和服务器,这里不推荐这样做。本教程会强烈建议先学习完成前面几章,了解一些必要的基础知识,然后开始做编程。