socket编程

在 UNIX/Linux 系统中不同的硬件设备都被看成一个文件。对硬件的操作,等同于对磁盘上普通文件的操作。

一切都是文件!

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

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

网络连接也是一个文件,它也有文件描述符

Socket是提供网络服务的库,socket本意为“插座”,插在插座上,就能获得数据。socket就是计算机用来获得网络数据的工具。

socket在计算机领域翻译为“套接字”。

Socket 是“程序可用的通信端点”,TCP / UDP 是两种最常用的传输方式。

socket 基本分类

socket 创建时指定的东西

socket(domain, type, protocol);

TCP 流式套接字。SOCK_STREAM ,可靠,双向,通讯流。

  • 先建立连接

  • 数据保证送达

  • 顺序保证

  • 像一条“管道”

UDP 数据报套接字。SOCK_DGRAM 无连接的套接字,快速传输但无序、传输的数据可能丢失也可能损坏,限制每次传输的数据大小、数据的发送和接收是同步的。

一条连接由 4 个东西决定

写一个 tcp 通信的程序

最后更新于