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

Python--TCP/UDP通信

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结

  一.客户端与服务端通信原理

1. 服务器端

服务器端的主要任务是监听来自客户端的连接请求,并与之建立连接,然后接收和发送数据。

  • 创建套接字:首先,服务器需要创建一个套接字(socket),这个套接字将用于监听来自客户端的连接请求。在创建套接字时,需要指定地址族(如IPv4的socket.AF_INET)和套接字类型(对于TCP,使用socket.SOCK_STREAM)。

  • 绑定地址和端口:服务器需要将套接字绑定到一个具体的IP地址和端口号上,以便客户端能够找到并连接到它。

  • 监听连接:服务器使用listen()方法开始监听连接请求。此时,服务器处于等待状态,直到接收到客户端的连接请求。

  • 接受连接:当服务器接收到客户端的连接请求时,它使用accept()方法来接受这个连接。accept()方法会返回一个包含新连接的套接字和客户端地址的元组。服务器将使用这个新连接的套接字来与客户端进行通信。

  • 数据收发:一旦连接建立,服务器和客户端就可以通过各自的套接字发送和接收数据了。数据可以是文本、二进制文件等任何类型的数据。

  • 关闭连接:通信完成后,服务器和客户端都应该关闭它们各自的套接字,以释放系统资源。

2. 客户端

客户端的主要任务是连接到服务器,并与之进行数据交换。

  • 创建套接字:与服务器类似,客户端也需要创建一个套接字,并指定地址族和套接字类型。

  • 连接服务器:客户端使用connect()方法连接到服务器。在调用connect()方法时,需要传入服务器的IP地址和端口号。

  • 数据收发:一旦连接建立,客户端就可以通过套接字发送数据到服务器,并接收服务器发回的数据了。

  • 关闭连接:通信完成后,客户端应该关闭套接字,以释放系统资源。

3. 原理总结

  • TCP三次握手:在TCP通信中,建立连接的过程涉及到三次握手。这确保了双方都能够确认对方的存在和准备接收数据。

  • 数据传输:TCP协议确保了数据的可靠传输。它通过序列号、确认应答、超时重传等机制来确保数据的顺序、完整性和无重复传输。

  • 连接管理:TCP连接是面向连接的,这意味着在数据交换之前必须先建立连接,并在数据交换完成后关闭连接。

  • 错误处理:在通信过程中,可能会遇到各种错误(如网络中断、连接超时等)。Python的socket模块提供了相应的异常处理机制,允许开发者在发生错误时采取适当的措施。

二.Socket模块

套接字(Socket)是一个非常重要的概念,它提供了一个用于网络通信的接口。套接字允许不同计算机上的程序之间进行数据传输。这种通信方式既可以是本机上的程序间的通信,也可以是跨网络的计算机之间的通信

在Python中进行TCP和UDP通信,可以使用内置的socket模块。socket模块提供了用于创建客户端和服务器端套接字的函数和方法。以下是一些常用的TCP通信函数:

服务端

  • 创建一个TCP套接字:
socket.socket(socket.AF_INET, socket.SOCK_STREAM):
  • 将套接字绑定到指定的地址和端口。
socket.bind(IP,端口)
  • 开始监听传入的连接请求。 
socket.listen(同时处理的请求数)
  •  接受一个连接请求,返回一个新的套接字对象,以及客户端的地址
socket.accept()
  • socket.accept() 是服务器在调用 listen() 方法之后等待客户端连接时使用的。这个调用会阻塞程序运行,直到有一个客户端连接到服务器,再执行下面程序
  • 当客户端成功连接到服务器时,accept() 方法会返回一个元组,其中包含两个元素:
    • 第一个元素包含服务端接收客户端连接的IP+端口
    • 第二个元素包含客户端连接的IP+端口

7625db5e63c5477182fe50d6e4f9c065.png

 客户端

  • 连接到服务端的地址和端口
socket.connect(IP,端口)
  •  发送数据到连接的另一端
socket.send(data)
  •  接收来自连接的数据
socket.recv(字节大小)
  •  关闭套接字连接
socket.close()

三.演示案例

服务端

import socket# 创建TCP服务器端
Tcp_Server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Tcp_Server.bind(("0.0.0.0",8888))  #将IP和端口与套接字绑定
Tcp_Server.listen(10)   #此处设置该进程socket最多处理的连接数是10#等待客户端连接
while True:Tcp_Client,info = Tcp_Server.accept() #阻塞程序运行直到收到客户端连接Tcp_Client.send("成功连接服务器!".encode()) #将发送的数据进行UTF-8编码

客户端 

import socket
Tcp_Client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#连接服务器
Server_IP = ("127.0.0.1",8888)
Tcp_Client.connect(Server_IP)  #连接服务器127.0.0.1中端口号为8888的进程socket#接收服务端信息
data_Server = Tcp_Client.recv(1024) #接收服务端的字节数为1024
print(data_Server.decode()) #将接收的二进制数据转换为字符串

总结

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用gitee如何回滚上一个版本,简单操作方式-gitee自带功能无需使用代码
  • P9235 [蓝桥杯 2023 省 A] 网络稳定性
  • 【动态规划】下降路径最小和 C++
  • 互联网全景消息(5)之RocketMq快速入门(下)
  • DHCP协议原理(网络协议)
  • Appium高级话题:混合应用与原生应用测试策略
  • js中箭头函数与普通函数的区别
  • idea 恢复 pom 文件呈现灰色并带删除线
  • 将Java程序打包成EXE程序
  • 【云原生安全篇】一文掌握Harbor集成Trivy应用实践
  • 重头开始嵌入式第四十一天(数据结构 树 哈希表)
  • 【图像拼接】基于SIFT/SURF特征算法的图像拼接,matlab实现
  • 图分类!!!
  • Linux——应用层自定义协议与序列化
  • uniapp中使用picker-view选择时间
  • ES6简单总结(搭配简单的讲解和小案例)
  • JavaScript 奇技淫巧
  • js数组之filter
  • PHP 的 SAPI 是个什么东西
  • 力扣(LeetCode)22
  • 入门级的git使用指北
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 以太坊客户端Geth命令参数详解
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • ionic异常记录
  • #define
  • #HarmonyOS:基础语法
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #每天一道面试题# 什么是MySQL的回表查询
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (21)起落架/可伸缩相机支架
  • (31)对象的克隆
  • (6)添加vue-cookie
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (三)Honghu Cloud云架构一定时调度平台
  • (四)进入MySQL 【事务】
  • (一)UDP基本编程步骤
  • (一)插入排序
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .chm格式文件如何阅读
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net SqlSugarHelper
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .netcore如何运行环境安装到Linux服务器
  • .net连接MySQL的方法
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • @软考考生,这份软考高分攻略你须知道
  • [001-03-007].第07节:Redis中的事务