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()) #将接收的二进制数据转换为字符串

总结

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/879985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始学习Linux(13)---多线程

目录 1.线程 1.线程的概念 2.线程的理解(Linux系统为例)---一般系统 3.进程vs线程 4.线程的控制 5.线程的等待 6.线程的终止 7.线程的分离 2.线程的互斥 1.互斥锁 2.条件变量 3.生产消费模型 4.阻塞队列 5.信号量 6.唤醒队列 1.线程 1.线…

【数据库】常用数据库简介

目录 🍔 常用的关系型数据库 🍔 Mysql简介 🍔 SQL 简介 SQL语句的分类 SQL 写法 SQL 常用的数据类型 🍔 DDL语句 对数据库的操作 对数据表的操作 🍔 DML语句 插入数据 insert into 修改数据 update 删除数…

css基础知识笔记

一言: “放任误解就是撒谎。” 文章目录 前言文章有误敬请斧正 不胜感恩!CSS基础教程0.文本样式基础1. CSS选择器2. CSS布局技巧3. 响应式设计4. Emmet语法 总结 前言 写在开始: 今天来看一眼CSS基础知识。 好几天没更新了 先更一篇 文章有…

C++如何进阶? -- 整理一些学习资料

在学习完C最基础的知识后,需要对C有更近一步的认知,才能在实际编程中写出更高效更清晰的代码。 看门见山,首先贴出学习资料: 书籍: STL源码剖析(必看)Effective C(必看)More Effective C(选看)深度探索C对象模型(选…

Java操控Redis (面经之 使用Redis)

操控Redis的工具 ReactiveRedisTemplate 和 RedisTemplate : RedisTemplate: 它是一个通用的模板类,可以使用任何序列化策略来序列化和反序列化键和值。默认情况下,它使用 JdkSerializationRedisSerializer 序列化值,并使用 Strin…

DataGrip在Windows和MacOS平台上的快捷键

0. 背景信息 No.说明1测试DataGrip版本号 : 2024.2.2 1. Windows下快捷键 2. MacOS下快捷键

【Kubernetes】常见面试题汇总(二十三)

目录 69.考虑一家拥有分布式系统的跨国公司,拥有大量数据中心,虚拟机和许多从事各种任务的员工。您认为这样公司如何以与 Kubernetes 一致的方式管理所有任务? 70.考虑一种情况,即公司希望通过维持最低成本来提高其效率和技术运营…

Java流程控制语句——跳转语句详解:break 与 continue 有什么区别?

🌐在Java编程中,break和continue是两个重要的控制流语句,它们允许开发者根据特定条件改变程序的执行流程。虽然两者都用于中断当前的行为,但它们的作用方式不同。本文将通过生动的例子来详细解释这两个语句,并使用流程…

C++/Qt 集成 AutoHotkey

C/Qt 集成 AutoHotkey 前言AutoHotkey 介绍 方案一:子进程启动编写AutoHotkey脚本准备 AutoHotkey 运行环境编写 C/Qt 代码 方案二:显式动态链接方案探索编译动态链接库集成到C工程关于AutoHotkeyDll.dll中的函数原型 总结 前言 上一篇介绍了AutoHotkey…

系统架构设计师 需求分析篇一

📘 结构化分析SA 思想 自顶向下:像剥洋葱一样,层层深入,大问题拆成小问题,再拆成更小的问题。 核心模型 数据字典 📔:记录数据元素的点点滴滴,从属性到使用方式,无所…

Spring自定义参数解析器

在这篇文章中,我们认识了参数解析器和消息转换器,今天我们来自定义一个参数解析器。 自定义参数解析器 实现HandlerMethodArgumentResolver的类,并注册到Spring容器。 Component//注册到Spring public class UserAr…

C#解决方案的各种操作

C#开发编程软件下载安装 C#开发编程软件下载安装_c#下载安装-CSDN博客文章浏览阅读208次。。。。_c#下载安装https://rxxw-control.blog.csdn.net/article/details/140879228 C#和S7-1200PLC S7.NET通信 C#和S7-1200PLC S7.NET通信_c# s1200 s7协议设置-CSDN博客文章浏览阅读…

std::pair和std::tuple

提示:文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问: 本文目标: 一、背景 最近 std::pair和std::tuple 二、用法 1.1 创建 看代码规范,提到:通过std::pair 和std::tuple ,函数可以同…

【Python】探索 TensorFlow:构建强大的机器学习模型

TensorFlow 是一个开源的深度学习框架,由 Google 开发,广泛应用于机器学习和人工智能领域。自从 2015 年推出以来,它已成为研究人员、开发者和数据科学家们不可或缺的工具。TensorFlow 提供了灵活、高效的工具集,可以帮助我们构建…

消息中间件---Kafka

一、什么是Kafka? Kafka是一个分布式流处理平台,类似于消息队列或企业消息传递系统; 流处理事什么呢? 流处理就是数据处理工作流,本质上是一种计算机编程范例。流处理是对接收到的新数据事件的连续处理。‌它涉及对从生产者到消…

mac系统加密文件

有一天突然想🤔️给自己的文件加密了,但是试了一下Mac竟然没有找到怎么加密,于是乎又去Ai 答案: 通过“command 空格键”聚焦搜索“终端”,然后回车进入电脑终端。 在终端中用“cd”切换到需要压缩文件的位置&…

【C++】—— string模拟实现

前言&#xff1a; 学习了string的使用&#xff0c;总感觉了解不是很深厚&#xff1b;自己模拟实现string类来帮助自己理解。 这里只是实现了一部分内容&#xff08;并没有实现完整的string类&#xff09;。 先来实现string类里面的成员变量&#xff1a; #include<iostream…

PyCharm的使用

PyCharm的入门使用教程 下载和安装PyCharm&#xff1a; 首先&#xff0c;访问JetBrains官方网站&#xff08;https://www.jetbrains.com/pycharm/&#xff09;下载PyCharm的最新版本。根据您的操作系统选择合适的版本进行下载。 安装完成后&#xff0c;打开PyCharm。 创建新…

记录一次显卡驱动安装

1. 驱动安装 1.1. 查看适合的版本 apt-get update ubuntu-drivers devices输出结果&#xff1a; 1.2. 安装合适的驱动版本 根据上面输出的内容 apt-get install nvidia-driver-545完成后重启 reboot查看新的驱动 nvidia-smi2. 安装/升级cuda 在nvidia-smi中显示的CUDA…

关于IT行业

关于IT行业的一些浅见 在当今的互联网时代&#xff0c;IT行业无疑是一个高速发展的领域。无论是人工智能、大数据、云计算&#xff0c;还是区块链、物联网&#xff0c;这些新兴技术的背后都离不开IT行业的推动力。今天我想简单谈一下自己对IT行业的一些看法和理解。 1. IT行业…