什么是socket

socket 是一种IPC方法,它允许位于同一主机(计算机)或使用网络连接起来的不同主机上的应用程序之间交换数据

通信 domain

socket 存在于一个通信domain中,它确定了:

  • 识别出一个socket的方法(即 socket“地址”的格式

  • 通信范围(即是在位于 同一主机 上的应用程序之间还是在位于使用一个 网络连接 起来的不同主机上的应用程序之间)

1

socket 类型

  • 流 socket,又称为 TCP socket

    • 可靠的:传输数据完整无缺的传输,或者返回一个传输失败的通知

    • 双向的:数据可以在两个socket之间的任意方向上传输

    • 字节流:不存在消息边界

    • 面向连接的:流socket 的正常工作需要一对相互连接的socket,因此流socket通常被称为面向连接的(对等socket)

  • 数据报 socket,又称为 UDP socket

    • 消息:存在消息边界

    • 不可靠的:数据传输是不可靠的,消息的到达可能是 无序的、重复的或者根本无法到达

    • 无连接的:一个数据报 socket 在使用时无需与另一个socket连接

1

socket 系统调用

流 socket

类似于电话系统

1

  • socket() 创建一个 socket,类似于安装电话

  • bind()socket 绑定到一个地址上,类似于某个电视台的热线电话

  • listen() 监听连接,类似于有人打电话就响铃

  • accept() 接受连接,类似于接通电话 (被动

  • connec() 发起连接,类似于拨打电话 (主动

  • close() 关闭连接

1

这里的情况,类似于,当你拨打电话时,显示当前用户正在接听,请稍后再拨,在这里就是,这个 连接没有被接受,成为了 未决的连接,一般情况下,当连接的 socket 有空时,会继续处理 未决连接队列 中的请求,如果 未决连接队列 中的请求数超处限定的数量就不再处理

1

这里显示了 本地的 双向的字节流通信通道,通过内核缓冲区进行数据传输

数据报 socket

类似于邮政系统

1

  • socket() 创建一个 socket,类似于创建一个邮箱

  • bind()socket 绑定到一个地址上,类似于将邮箱放在一个公共地方

  • sendto() 参数为 socket 地址,发送数据报,类似于将收信人的地址写到信件上并投递

  • recvfrom() 接收数据报,类似于目标接收到信件

  • close() 关闭 socket

1

 posted on 2025-05-12 13:45  Dylaris  阅读(34)  评论(0)    收藏  举报