当前位置: 首页 > 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()) #将接收的二进制数据转换为字符串

总结

 

 

相关文章:

Python--TCP/UDP通信

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一.客户端与服务端通信原理 1. 服务器端 服务器端的主要任务是监听来自客户端的连接请求,并与之建立连接,然后接收和发送数据。 创建套接字:首先&#xff0…...

【已解决】请教 “Sa-Token 集成 xxl-job,报错:非 web 上下文无法获取 HttpServletRequest” 如何解决

1. xxl-job 报错日志 2024-09-11 17:19:04 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1726046344528] <br>----------- xxl-job job execute start -----------<br>----------- Param: 2024-09-11 17:19:04 [com.xxl.job.core.thread…...

Redis——常用数据类型string

目录 常用数据结构&#xff08;类型&#xff09;Redis单线程模型Reids为啥效率这么高&#xff1f;速度这么快&#xff1f;&#xff08;参照于其他数据库&#xff09; stringsetgetMSET 和 MGETSETNX&#xff0c;SETEX&#xff0c;PSETEXincr&#xff0c;incrby&#xff0c;decr…...

架构设计:负责网络、定时、坐下、站起、重连等,支持多类游戏的无锁房间

本文首发在这里 重中之重就是想实现无锁&#xff01;无锁&#xff01;无锁&#xff01; 源码 servergolang 预计还会实现gate_server&#xff0c;接受并保持websocket长连接&#xff0c;按需双向流到game_server进行消息转发 未来上述服务均会以容器的形式由k8s自动化部署、…...

个人随想-gpt-o1大模型中推理链的一个落地实现

​首先祝大家中秋节快乐。 最近openai又推出了新的模型openai o1​还有它的mini版。官网的介绍&#xff0c;就是它的推理能力很强&#xff0c;比gpt-4o​有很大的提升。 最近也跟同行在聊这个o1&#xff0c;​看看落地方面有哪些可行性。在我们自己的实验上&#xff0c;把o1用…...

python解析ip范围,判断ip是否在ip范围内

目录 1. 背景 2. 代码使用示例 2.1 分割ip&#xff0c;横杠 &#xff08;-&#xff09; 的ip范围 2.2 判断ip在掩码&#xff08;/&#xff09;的范围内 2.3 判断ip在横杠&#xff08;-&#xff09;的范围内 2.3.1 格式&#xff1a;192.168.1.1-192.168.1.10 2.3.2 格式&…...

Springboot错误日志切面,找到post请求体被消费后的数据

问题记录&#xff1a;测试环境接口报错&#xff0c;日志里没有请求参数等信息&#xff0c;于是写了一个切面&#xff0c;但切面中获取不到 request的请求体&#xff0c;因为 post 请求体只能被消费一次&#xff0c;于是找解决办法 解决方法 既然 request 被消费了导致对应的请…...

【二十】【QT开发应用】listwidget右键菜单和删除item

创建项目&#xff0c;添加资源文件 在项目文件夹中创建resources资源文件夹。 在vs中打开qrc文件&#xff0c;选择添加资源文件。 选择我们resources资源文件中的所有文件作为资源文件。 最后不要忘记点击保存。 向ListWidget控件添加item 右键菜单 在.h文件中添加QMenu头…...

LabVIEW机动车动态制动性能校准系统

机动车动态制动性能测试系统通过高精度的硬件设备与LabVIEW软件的紧密配合&#xff0c;实现了对机动车制动性能的精确校准与评估。系统不仅提高了测试的精确性和效率&#xff0c;而且具备良好的用户交互界面&#xff0c;使得操作更加简便、直观。 项目背景 随着机动车辆数量的…...

Linux(CentOS8)服务器安装RabbitMQ

我安装了很久都没有成功, 各种问题, 每次的异常都不一样, 现将成功安装过程做个总结 安装前工作 确保已经安装了一些基础工具和组件库 下载安装包 https://www.erlang.org/patches/otp-24.3.4.5 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.15/ra…...

R语言进行无序多分类Logistic回归

在临床研究中&#xff0c;接触最多的是二分类数据&#xff0c;如淋巴癌是否转移&#xff0c;是否死亡&#xff0c;这些因变量最后都可以转换成二分类0与1的问题。然后建立二元logistic回归方程&#xff0c;可以得到影响因素的OR值。但有时我们也会接触到多分类结局数据&#xf…...

Maven从入门到精通(三)

一、Settings 配置 settings.xml 用来配置 maven 项目中的各种参数文件&#xff0c;包括本地仓库、远程仓库、私服、认证等信息。 全局 settings、用户 setting、pom 的区别&#xff1a; 全局 settings.xml 是 maven 的全局配置文件&#xff0c;一般位于 ${maven.home}/conf…...

Red Hat 和 Debian Linux 对比

原图的作者(https://bbs.deepin.org/post/209759) Red Hat Enterprise Linux https://www.redhat.com/ CentOS Linux https://www.centos.org/ Fedora Linux https://fedoraproject.org/ Debian https://www.debian.org/ Ubuntu https://cn.ubuntu.com/ https://ubuntu.c…...

Axure设计之全屏与退出全屏交互实现

在Axure RP中&#xff0c;设计全屏与退出全屏的交互功能可以极大地提升用户体验&#xff0c;尤其是在展示产品原型或进行演示时。本文将详细介绍如何在Axure RP中通过结合JavaScript代码实现全屏与退出全屏的交互效果。 ​ Axure原型设计web端交互元件库&#xff1a;https://…...

如何测试出自己电脑的网络速度(网速)?

首先电脑上要下载一个这样的一个电脑软件&#xff1a;360安全卫士 1、打开软件之后&#xff0c;选择【网络安全】 2、选择【宽带测速器】 3、点击之后&#xff0c;即可开始检测当前网络速度&#xff0c;等待大概十几秒后会出现结果,如下&#xff1a; 位置①&#xff1a;显示…...

如何利用AI进行有效的科技产品发布

如果你们公司即将推出一款具有颠覆性的软件&#xff0c;你大概已经了解了科技在现代市场中的价值。 但像AI这样的技术不仅仅是有效的产品组成部分&#xff0c;它们还可以帮助将这些产品推向客户&#xff08;或安装到他们的电脑上&#xff09;。 Kuno Creative明白AI在科技营销…...

二层、三层网络基本原理

文章目录 二层网络整体拓扑相关配置配置namespace创建switch创建veth设备配置veth的IP启动veth 测试 三层网络配置vm1配置vm2配置 测试 二层网络 我们用Linux bridge模拟现实中的switch&#xff0c;用namespace模拟连接在交换机上的pc 整体拓扑 ------------------ ----…...

全面掌握 Jest:从零开始的测试指南(上篇)

随着JavaScript在前后端开发中的广泛应用&#xff0c;测试已成为保证代码质量的关键环节。 为什么需要单元测试 在我们的开发过程中&#xff0c;经常需要定义一些算法函数&#xff0c;例如将接口返回的数据转换成UI组件所需的格式。为了校验这些算法函数的健壮性&#xff0c;部…...

Go 交叉编译

Mac 下编译 Linux 和 Windows 64位可执行程序 Linux&#xff1a; CGO_ENABLED0 GOOSlinux GOARCHamd64 go build main.go Windows&#xff1a; CGO_ENABLED0 GOOSwindows GOARCHamd64 go build main.go Linux 下编译 Mac 和 Windows 64位可执行程序 Mac: CGO_ENABLED0 G…...

goctl安装失败

今天遇到一个很奇怪的问题 在阿里云的ubuntu服务器上远程安装goctl&#xff1a;go install github.com/zeromicro/go-zero/tools/goctllatest&#xff0c;后面会断开ssh连接&#xff0c;就再也连不上了&#xff0c;connecting with ssh timed out。在阿里云的workbench上连接显…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...