socket是什么?套接字是什么?

前言:网络编程就是编写程序使两台联网的电脑相互交换数据,
那么,两台计算机之间用什么传输数据呢?首先需要物理连接。
如今大部分计算机都已经连接到互联网,因此不需要担心这里一点。
在基础上,只需要考虑如何编写数据传输程序。
但实际上这一点也不用愁,因为操作系统提供了socket。
即使对网络数据传输原理不太熟悉,我们也能通过socket来编程。

一.什么是socket?

socket的原意是“插座”,在计算机通信领域,socket被翻译为“套接字”。他是计算机之间进行通信的一种约定或一种方式。通过socket这种约定,计算机可以接受其他计算机的数据,也可以向其他计算机发送数据。
我们把插头插到插座上就可以获得电力供应,同样,为了与远程计算机进行数据传输,需要连接到因特网,而socket就是用来链接到因特网的工具。
socket的典型应用就是web服务器和浏览器:浏览器获得用户输入的URL,向服务器发起请求,服务器分析接受到URL,将对应的网页返回给浏览器,浏览器再经过分析和渲染,就将文字图片视频等元素呈现给用户。学习socket,也就是学习计算机之间如何通信,并编写出实用的程序。
2.jpg

1.UNIX/Linux 中的 socket 是什么?

UNIX/Linux 中的 socket 是什么?
在 UNIX/Linux 系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。
对这些文件的操作,等同于对磁盘上普通文件的操作。

你也许听很多高手说过,UNIX/Linux 中的一切都是文件!那个家伙说的没错。

为了表示和区分已经打开的文件,UNIX/Linux 会给每个文件分配一个 ID,
这个 ID 就是一个整数,被称为文件描述符(File Descriptor)。例如:
通常用 0 来表示标准输入文件(stdin),它对应的硬件设备就是键盘;
通常用 1 来表示标准输出文件(stdout),它对应的硬件设备就是显示器。

UNIX/Linux 程序在执行任何形式的 I/O 操作时,都是在读取或者写入一个文件描述符。
一个文件描述符只是一个和打开的文件相关联的整数,它的背后可能是一个硬盘上的普通文件、FIFO、管道、终端、键盘、显示器,甚至是一个网络连接。

请注意,网络连接也是一个文件,它也有文件描述符!你必须理解这句话。

我们可以通过 socket() 函数来创建一个网络连接,或者说打开一个网络文件,socket() 的返回值就是文件描述符。
有了文件描述符,我们就可以使用普通的文件操作函数来传输数据了,例如:
用 read() 读取从远程计算机传来的数据;
用 write() 向远程计算机写入数据。

你看,只要用 socket() 创建了连接,剩下的就是文件操作了,网络编程原来就是如此简单!

2.Window 系统中的 socket 是什么?

Windows 也有类似“文件描述符”的概念,但通常被称为“文件句柄”。
因此,本教程如果涉及 Windows 平台将使用“句柄”,如果涉及 Linux 平台则使用“描述符”。
与 UNIX/Linux 不同的是,Windows 会区分 socket 和文件,Windows 就把 socket 当做一个网络连接来对待,

socket:

我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。
能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
1.jpeg

Last modification:December 6th, 2019 at 09:21 am
如果觉得我的文章对你有用,请随意赞赏