1.socket 是什么?
在计算机通信领域, socket 被翻译为 "套接字", 它是计算机之间进行通信的一种约定或一种方式. 通过 socket 这种约定, 一台计算机可以接收其他计算机的数据, 也可以向其他计算机发 送数据.
2.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() 创建了连接, 剩下的就是文件操作了, 网络编程原来就是如此简单!
3. 套接字的类型
<1 > 流格式套接字 (基于 TCP)
SOCK_STREAM 是一种面向连接的, 可靠的, 双向的通信数据流, 数据可以准确无误地到达另一台计算机, 如果损坏或丢失, 可以重新发送.
SOCK_STREAM 有以下几个特征:
数据在传输过程中不会消失;
数据是按照顺序传输的;
数据的发送和接收不是同步的 (有的教程也称 "不存在数据边界")-- 有缓存区
<2 > 数据报格式套接字 (基于 UDP)
SOCK_DGRAM 是无连接的不可靠的, 不会进行数据的检查
它有以下特征:
强调快速传输而非传输顺序;
传输的数据可能丢失也可能损毁;
限制每次传输的数据大小;
数据的发送和接收是同步的 (有的教程也称 "存在数据边界").
来源: http://www.bubuko.com/infodetail-3047711.html