当前位置: 首页 > 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地址和端口号是如何协同工作的

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

http://www.xdnf.cn/news/169327.html

相关文章:

  • Java自定义注解详解
  • 「Mac畅玩AIGC与多模态01」架构篇01 - 展示层到硬件层的架构总览
  • 深度学习常见框架:TensorFlow 与 PyTorch 简介与对比
  • 在 Ubuntu 24.04 系统上安装和管理 Nginx
  • body Param Query 三个 不同的入参 分别是什么意思 在前端 要怎么传 这三种不同的参数
  • DAY7-C++进阶学习
  • Python爬虫课程实验指导书
  • 麒麟系统搭建离线NTP服务器,让局域网内windows系统同步其时间,并付排错避坑思路
  • Android Studio中创建第一个Flutter项目
  • 前端性能优化面试回答技巧
  • django admin 去掉新增 删除
  • 【愚公系列】《Manus极简入门》005-DeepSeek与Manus的创新之处
  • PostSwigger Web 安全学习:CSRF漏洞3
  • C# 利用log4net 工作台打印和保存到文件
  • 央视两次采访报道爱藏评级,聚焦生肖钞市场升温,评级币成交易安全“定心丸”
  • C# 类的基本概念(类成员)
  • 16bit 高精度低延时霍尔角度编码器,KTH7824,替代MA730
  • 高自由度与多功能指尖设计:Allegro灵巧手V5(4F Plus)的技术亮点
  • 电商数据采集电商,行业数据分析,平台数据获取|稳定的API接口数据
  • 榕壹云国际版短剧系统:基于Spring Boot+MySQL+UniApp的全球短剧创作平台
  • Scala 函数柯里化及闭包
  • 用 Nodemon 解决 npm run serve 频繁重启服务
  • 2个小时1.5w字| React Golang 全栈微服务实战
  • 双目RealSense系统配置rs_camera.launch----实现D435i自制rosbag数据集到离线场景的slam建图
  • BP 算法探秘 :神经网络的幕后引擎
  • OceanBase TPCC测试常见报错汇总
  • 游戏引擎学习第248天:清理数据块显示
  • 第11章 安全网络架构和组件(一)
  • python 3.14 暂不支持 pyside6 ? python 窗体无法显示!
  • 线性代数—向量与矩阵的范数(Norm)