当前位置: 首页 > news >正文

计算机网络 | 应用层(6) -- 套接字编程

 💓个人主页:mooridy
💓专栏地址:《计算机网络:自顶向下方法》 大纲式阅读笔记_mooridy的博客-CSDN博客

💓本博客内容为《计算机网络:自顶向下方法》第二章应用层第七节知识梳理
关注我🌹,和我一起学习更多计算机的知识~
🔝🔝🔝

目录

套接字编程:生成网络应用

基本概念

套接字(Socket)

工作原理

UDP 套接字编程

UDP(用户数据报协议)特点

流程

服务器端流程

客户端流程

TCP 套接字编程

TCP 特点

流程

服务器端流程

客户端流程


套接字编程:生成网络应用

基本概念

套接字(Socket)

就像是不同计算机之间进行通信的 “端点”。每个套接字都有一个对应的 IP 地址和端口号,IP 地址用于标识网络中的计算机,而端口号则用于标识计算机上的特定应用程序。通过 IP 地址和端口号,数据可以准确地从一个套接字传输到另一个套接字。

工作原理

  • 创建套接字:在通信的双方,首先需要创建一个套接字对象。这个套接字对象将作为数据传输的接口。
  • 绑定地址:服务器端需要将套接字绑定到一个特定的 IP 地址和端口号上,以便客户端能够找到它。
  • 监听连接:服务器端套接字开始监听指定端口,等待客户端的连接请求。
  • 建立连接:客户端套接字尝试连接到服务器端的指定地址和端口。服务器端接受连接后,双方就建立了一个通信通道。
  • 数据传输:连接建立后,双方可以通过套接字发送和接收数据。
  • 关闭连接:通信结束后,双方关闭套接字,释放系统资源。

UDP 套接字编程

UDP(用户数据报协议)特点

  • 客户端与服务器之间没有 “连接”,在发送数据之前没有握手过程。
  • 发送方会明确地将目标 IP 地址和端口号附加到每个数据包上。
  • 接收方会从接收到的数据包中提取发送方的 IP 地址和端口号。
  • UDP 传输的数据可能会丢失,或者接收到的数据可能是乱序的。
  • 从应用程序的角度来看,UDP 在客户端和服务器之间提供不可靠的字节组(“数据报”)传输。

流程

服务器端流程
  1. 创建套接字:使用 socket(AF_INET, SOCK_DGRAM) 创建一个 UDP 套接字,AF_INET 表明采用 IPv4 地址族,SOCK_DGRAM 表示这是数据报套接字 。同时指定一个端口号 x ,用于监听客户端发来的数据报。
  2. 读取数据报:服务器通过 serverSocket 等待接收来自客户端的数据报。UDP 数据报是独立的消息单元,服务器从该套接字接收这些单元。
  3. 回复数据报:当服务器接收到客户端的数据报并处理后,要向客户端发送回复。回复时需要指定客户端的地址和端口号,以便客户端能正确接收,回复通过 serverSocket 发送出去。
客户端流程
  1. 创建套接字:同样使用 socket(AF_INET, SOCK_DGRAM) 创建 UDP 套接字,客户端套接字用于与服务器通信。
  2. 发送数据报:客户端创建一个包含目标服务器 IP 地址和端口号 x 的数据报,然后通过 clientSocket 将数据报发送给服务器。在发送数据报时,客户端不需要与服务器提前建立连接。
  3. 读取数据报:客户端从 clientSocket 接收服务器发回的回复数据报。
  4. 关闭套接字:通信完成后,客户端关闭 clientSocket ,释放相关资源。

TCP 套接字编程

TCP 特点

  • 客户端必须与服务器建立联系,服务器进程必须首先处于运行状态,且服务器必须创建一个用于接收客户端连接的套接字(好比一扇 “门”)。
  • 客户端通过创建一个 TCP 套接字,并指定服务器进程的 IP 地址和端口号与服务器建立联系。当客户端创建套接字时,客户端的 TCP 会与服务器的 TCP 建立连接。
  • 当服务器收到客户端的连接请求时,服务器的 TCP 会创建一个新的套接字,供服务器进程与该特定客户端进行通信。这使得服务器能够与多个客户端进行通信,源端口号用于区分不同的客户端。
  • 从应用程序的角度来看,TCP 在客户端和服务器之间提供可靠的、按序的字节流传输(就像一个 “管道”)。

流程

服务器端流程
  1. 创建监听套接字:服务器使用 socket() 创建一个 TCP 套接字,并绑定到特定端口号 x ,这个套接字用于监听客户端的连接请求,就像在门口站岗,等待有人敲门。
  2. 等待连接请求:通过 serverSocket.accept() 方法,服务器进入阻塞状态,一直等待客户端的连接请求。一旦有客户端请求连接,就会创建一个新的套接字 connectionSocket ,专门用于和这个客户端进行通信。这就好比门卫接待访客后,给访客安排一个单独的房间进行交流。
  3. 读取请求与回复:使用 connectionSocket 读取客户端发送过来的请求信息,然后根据请求进行处理,并向 connectionSocket 写入回复信息发送给客户端。
  4. 关闭连接套接字:通信结束后,关闭 connectionSocket ,释放相关资源。不过要注意,serverSocket 一般不会关闭,而是继续监听新的客户端连接请求。
客户端流程
  1. 创建套接字并连接:客户端使用 socket() 创建一个 TCP 套接字,然后通过这个套接字向服务器的指定主机 ID 和端口号 x 发起连接请求,尝试与服务器建立连接。
  2. 发送请求与接收回复:连接建立成功后,客户端通过 clientSocket 向服务器发送请求信息,然后等待并从 clientSocket 读取服务器返回的回复信息。
  3. 关闭套接字:通信完成后,客户端关闭 clientSocket ,释放占用的资源。

编辑

分享

用Python语言编写一个简单的UDP套接字通信程序

详细解释一下在网络编程中IP地址和端口号是如何协同工作的

套接字编程和其他网络编程模型相比有哪些优势和劣势

相关文章:

  • 大模型基础(三):Llama3复现
  • Mac桌面幻灯片,Google文档,google硬盘和google等图标如何移除
  • Docker(二):docker常用命令
  • 2025系统架构师---解释器架构风格‌
  • Rust:安全与性能兼得的现代系统编程语言
  • 深入探索Python Pandas:解锁数据分析的无限可能
  • 【Java】分布式事务解决方案
  • 「Mac畅玩AIGC与多模态02」部署篇01 - 在 Mac 上部署 Ollama + Open WebUI
  • (MySQL)表的操作
  • Ant(Ubuntu 18.04.6 LTS)安装笔记
  • 「Mac畅玩AIGC与多模态03」部署篇02 - 在 Mac 上部署 Dify
  • Pydantic:校验器(@validator)、模型嵌套、模型继承
  • 使用cesium设置第一视角
  • openharmony—4.1 softbus_tool 工具编译使用测试笔记(持续更新)
  • ubuntu 安装ollama后,如何让外网访问?
  • 基于QT(C++)实现(GUI)旅行查询与模拟系统
  • 展销编辑器在未来的发展前景​
  • python 取出字串中的所有词
  • C++:迭代器失效问题
  • 东田数码科技前端面经
  • 葛兰西:“生活就是抵抗”
  • 来论|如何看待韩企在美申请“饺子”专利
  • 观察|上海算力生态蓬勃发展,如何助力千行百业数智化转型升级
  • 四川省人大常委会原党组成员、副主任宋朝华接受审查调查
  • 国家市监总局:民生无小事,严打民生领域侵权假冒违法行为
  • 儒说︱问世间孝为何物