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

【TCP 网络通信(发送端 + 接收端)实例 —— Python】

TCP 网络通信(发送端 + 接收端)实例 —— Python

  • 1. 引言
  • 2. 创建 TCP 服务器(接收端)
    • 2.1 代码示例:TCP 服务器
    • 2.2 代码解释:
  • 3. 创建 TCP 客户端(发送端)
    • 3.1 代码示例:TCP 客户端
    • 3.2 代码解释:
  • 4. 运行示例
  • 5. 异步 TCP 通信
    • 5.1 异步 TCP 服务器
    • 5.2异步 TCP 客户端
    • 5.3 代码解释:
  • 6. 总结
  • 7. 常见问题解答
  • 8. 参考资料

1. 引言

在这里插入图片描述

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它广泛应用于互联网和局域网中,确保数据能够安全、有序地从一个设备传输到另一个设备。本文将通过具体的 Python 实例,详细介绍如何实现 TCP 网络通信中的发送端和接收端。

  1. NetAssist网络调试助手
  2. Python环境配置

准备工作

在开始编写代码之前,确保您已经安装了 Python 环境。Python 内置的 socket
模块提供了对低级网络接口的访问,因此不需要额外安装任何库。


2. 创建 TCP 服务器(接收端)

服务器端的主要任务是监听来自客户端的连接请求,并与每个连接的客户端进行双向通信。我们将使用多线程来处理多个客户端的并发连接。

2.1 代码示例:TCP 服务器


import socket
import threading
import queue
import time# 定义服务器地址和端口
HOST = '192.168.1.111'  # 本地回环地址
PORT = 8080        # 非特权端口# 全局消息队列,用于存储服务器要发送的消息
message_queue = queue.Queue()# 线程安全的客户端列表,存储所有已连接的客户端套接字
clients = set()# 锁对象,确保对 clients 集合的操作是线程安全的
lock = threading.Lock()def handle_client(client_socket, client_address):print(f"Connected by {client_address}")try:while True:# 接收来自客户端的数据data = client_socket.recv(1024)if not data:break  # 如果没有收到数据,退出循环print(f"Received from {client_address}: {data.decode()}")# 发送响应给客户端response = f"Server received: {data.decode()}"client_socket.sendall(response.encode())# 模拟服务器主动发送数据time.sleep(5)  # 每隔5秒检查是否有新消息with lock:if not message_queue.empty():msg = message_queue.get()print(f"Sending to {client_address}: {msg}")client_socket.sendall(msg.encode())except Exception as e:print(f"Error handling client {client_address}: {e}")finally:# 关闭客户端连接with lock:clients.discard(client_socket)client_socket.close()print(f"Connection with {client_address} closed.")def broadcast_message(message):"""将消息发送给所有已连接的客户端"""with lock:for client in clients:try:client.sendall(message.encode())except Exception as e:print(f"Failed to send message to client: {e}")def start_server():with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:server_socket.bind((HOST, PORT))server_socket.listen()print(f"Server listening on {HOST}:{PORT}")# 启动一个后台线程,定期检查消息队列并广播消息threading.Thread(target=check_and_broadcast_messages, daemon=True).start()while True:client_socket, client_address = server_socket.accept()with lock:clients.add(client_socket)# 为每个新连接启动一个新的线程来处理client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))client_thread.start()def check_and_broadcast_messages():"""定期检查消息队列并广播消息"""while True:if not message_queue.empty():msg = message_queue.get()print(f"Broadcasting message: {msg}")broadcast_message(msg)time.sleep(1)  # 每隔1秒检查一次if __name__ == "__main__":# 启动服务器threading.Thread(target=start_server, daemon=True).start()# 模拟服务器主动发送消息while True:msg = input("Enter message to broadcast (or type 'exit' to quit): ")if msg.lower() == 'exit':breakmessage_queue.put(msg)

2.2 代码解释:

  • server_socket.bind():绑定服务器到指定的 IP 地址和端口。
  • server_socket.listen():使服务器进入监听状态,等待客户端连接。
  • server_socket.accept():接受一个客户端连接,返回一个新的套接字对象和客户端地址。
  • handle_client():处理客户端的通信,接收数据并回显给客户端。
  • threading.Thread():为每个新连接启动一个新的线程,以便服务器可以同时处理多个客户端。

运行服务端
在这里插入图片描述

客户端响应,发送body1,正常回传。🤞🤞🤞
在这里插入图片描述

3. 创建 TCP 客户端(发送端)

客户端的主要任务是连接到服务器,并与服务器进行双向通信。客户端可以发送消息给服务器,并接收服务器的响应。

3.1 代码示例:TCP 客户端

import socket
import threading# 定义服务器地址和端口
HOST = '192.168.1.101'  # 本地回环地址
PORT = 8080        # 非特权端口client_socket = Nonedef receive_messages():global client_socketwhile True:try:# 接收服务器的响应response = client_socket.recv(1024).decode()if not response:breakprint(f"Received from server: {response}")except Exception as e:print(f"Error receiving message: {e}")breakdef start_client():global client_socketclient_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)client_socket.connect((HOST, PORT))print(f"Connected to server at {HOST}:{PORT}")# 启动一个线程来接收消息receive_thread = threading.Thread(target=receive_messages)receive_thread.daemon = True  # 设置为守护线程,主程序退出时自动结束receive_thread.start()while True:# 输入要发送的消息message = input("Enter message to send (or type 'exit' to quit): ")if message.lower() == 'exit':break# 发送消息给服务器client_socket.sendall(message.encode())client_socket.close()if __name__ == "__main__":start_client()

3.2 代码解释:

  • client_socket.connect():连接到指定的服务器地址和端口。
  • client_socket.sendall():发送数据到服务器。
  • client_socket.recv():接收来自服务器的数据。
  • input():从用户输入获取要发送的消息,用户可以输入 exit 来终止程序。

4. 运行示例

  1. 启动服务器

    • 打开一个终端或命令提示符窗口,导航到包含服务器代码的文件夹,然后运行以下命令:
      python tcp_server.py
      
    • 服务器将开始监听指定的端口,并等待客户端连接。
  2. 启动客户端

    • 打开另一个终端或命令提示符窗口,导航到包含客户端代码的文件夹,然后运行以下命令:
      python tcp_client.py
      
    • 客户端将连接到服务器,并允许用户输入消息发送给服务器。
  3. 测试通信

    • 在客户端窗口中输入消息,按回车键发送给服务器。
    • 服务器将接收消息并回显给客户端,客户端会显示服务器的响应。
    • 用户可以继续发送消息,或者输入 exit 来终止程序。
      在这里插入图片描述

服务端接收:
在这里插入图片描述

这个只能一发一收,不能连续发或连续收,接下来采用异步就可以实现这个缺陷,而且响应更好


5. 异步 TCP 通信

为了提高性能和响应速度,您可以使用 Python 的 asyncio 库来实现异步 TCP 通信。异步编程模型允许程序在等待 I/O 操作时执行其他任务,从而提高效率。

5.1 异步 TCP 服务器

我们将创建一个异步 UDP 服务器,它不仅可以接收来自客户端的数据包并回显,还可以主动向客户端发送消息。服务器将维护一个客户端列表,并定期检查是否有新消息需要发送给所有已连接的客户端。

import asyncio# 定义服务器地址和端口
HOST = '192.168.1.111'  # 本地回环地址
PORT = 8080        # 非特权端口client_address = Noneasync def handle_client(reader, writer):global client_addressdata = await reader.read(1024)addr = writer.get_extra_info('peername')client_address = addr  # 更新全局的 client_addressprint(f"Received from {addr}: {data.decode()}")# 发送响应给客户端response = f"Server received: {data.decode()}"writer.write(response.encode())await writer.drain()print(f"Sent to {addr}: {response}")async def start_server():server = await asyncio.start_server(handle_client, HOST, PORT)addr = server.sockets[0].getsockname()print(f"Server listening on {addr[0]}:{addr[1]}")async with server:await server.serve_forever()async def broadcast_message():while True:msg = await asyncio.to_thread(input, "Enter message to broadcast (or type 'exit' to quit): ")if msg.lower() == 'exit':breakif client_address is not None:  # 确保 client_address 已经被设置try:_, writer = await asyncio.open_connection(*client_address)writer.write(msg.encode())await writer.drain()writer.close()await writer.wait_closed()except ConnectionRefusedError:print("Client is not available.")else:print("No client connected yet.")async def main():# 启动服务器server_task = asyncio.create_task(start_server())# 启动广播消息任务broadcast_task = asyncio.create_task(broadcast_message())await asyncio.gather(server_task, broadcast_task)if __name__ == "__main__":asyncio.run(main())

5.2异步 TCP 客户端

import asyncio# 定义服务器地址和端口
HOST = '192.168.1.101'  # 本地回环地址
PORT = 8080        # 非特权端口async def receive_messages(reader):while True:try:# 接收服务器的响应response = await reader.read(1024)if not response:breakprint(f"Received from server: {response.decode()}")except Exception as e:print(f"Error receiving message: {e}")breakasync def send_messages(writer):while True:# 输入要发送的消息message = await asyncio.get_event_loop().run_in_executor(None, input, "Enter message to send (or type 'exit' to quit): ")if message.lower() == 'exit':break# 发送消息给服务器writer.write(message.encode())await writer.drain()async def start_client():reader, writer = await asyncio.open_connection(HOST, PORT)print(f"Connected to server at {HOST}:{PORT}")# 启动两个任务:一个用于接收消息,一个用于发送消息receive_task = asyncio.create_task(receive_messages(reader))send_task = asyncio.create_task(send_messages(writer))# 等待任一任务完成(即用户输入 'exit' 或连接断开)done, pending = await asyncio.wait([receive_task, send_task], return_when=asyncio.FIRST_COMPLETED)# 取消所有未完成的任务for task in pending:task.cancel()try:await taskexcept asyncio.CancelledError:passwriter.close()await writer.wait_closed()if __name__ == "__main__":asyncio.run(start_client())

5.3 代码解释:

  • asyncio.Protocol:定义了一个异步协议类,用于处理客户端连接。
  • asyncio.open_connection():异步打开与服务器的连接。
  • asyncio.run():启动异步事件循环并运行主函数。
  • 只能输入英文,暂不支持中文

6. 总结

通过上述示例,我们展示了如何使用 Python 实现 TCP 网络通信中的发送端和接收端。同步版本的代码简单易懂,适合初学者;而异步版本则提供了更高的性能和更好的并发处理能力,适用于更复杂的应用场景。🛹🛹🛹


7. 常见问题解答

  • Q: 如何处理多个客户端的并发连接?

    • A: 使用多线程或多进程可以处理多个客户端的并发连接。对于更高效的方式,建议使用 asyncio 库来实现异步编程。
  • Q: 如何确保数据传输的可靠性?

    • A: TCP 协议本身就是一个面向连接的可靠协议,它会自动处理数据包的丢失、重复和乱序问题。此外,您可以在应用层添加更多的错误检测机制,如校验和或消息确认。
  • Q: 如何处理大文件传输?

    • A: 对于大文件传输,建议将文件分块发送,并在每次发送后等待服务器的确认。这样可以确保每一块数据都成功传输,并且可以在出现问题时重新发送。

8. 参考资料

  • Python 官方文档 - socket 模块
  • Python 官方文档 - asyncio 模块
  • TCP/IP 协议详解

从而实现对外部世界进行感知,充分认识这个有机与无机的环境,科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣

  1. 我会持续更新对应专栏博客,非常期待你的三连!!!🎉🎉🎉
  2. 如果鹏鹏有哪里说的不妥,还请大佬多多评论指教!!!👍👍👍
  3. 下面有我的🐧🐧🐧群推广,欢迎志同道合的朋友们加入,期待与你的思维碰撞😘😘😘

相关文章:

【TCP 网络通信(发送端 + 接收端)实例 —— Python】

TCP 网络通信(发送端 接收端)实例 —— Python 1. 引言2. 创建 TCP 服务器(接收端)2.1 代码示例:TCP 服务器2.2 代码解释: 3. 创建 TCP 客户端(发送端)3.1 代码示例:TCP…...

PostgreSQL和Oracle的sql差异

PostgreSQL和Oracle的sql差异 1.rownum &#xff08;1&#xff09;Oracle分页查询使用rownum&#xff0c;PostgreSQL使用limit offset ORACLEPOSTGRESQLselect * from (select rownum r,e.* from emp e where rownum <5) t where r>0;select * from emp limit 5 offset…...

阻塞队列详解

阻塞队列介绍 队列 是限定在一端进行插入&#xff0c;另一端进行删除的特殊线性表。先进先出(FIFO)线性表。允许出队的一端称为队头&#xff0c;允许入队的一端称为队尾。 数据结构演示网站&#xff1a; https://www.cs.usfca.edu/~galles/visualization/Algorithms.html Q…...

kali安装谷歌输入法

临时隐匿你IP地址 ifconfig 查询kali现在所用ip ifconfig eth0 所需要修改的ip/掩码24 修改临时ip格式命令 安装中文输入法命令 临时隐匿你IP地址 ifconfig 查询kali现在所用ip ifconfig eth0 所需要修改的ip/掩码24 修改临时ip格式命令安装中文输入法命令 apt-get in…...

C语言:编译与链接

本篇博客给大家带来的是代码从运行到生成可执行文件的流程和原理 &#x1f41f;&#x1f41f;文章专栏&#xff1a;C语言 &#x1f680;&#x1f680;若有问题评论区下讨论&#xff0c;我会及时回答 ❤❤欢迎大家点赞、收藏、分享 你们的支持就是我创造的动力 今日思想&#xf…...

VTK编程指南<五>:VTK中的坐标系统、空间变换及VTK矩阵详解

1、坐标系统 计算机图形学里常用的坐标系统主要有 4 种&#xff0c;分别是 Model 坐标系统、World 坐标系统、View坐标系统和 Display坐标系统(这些名词在不同的书里的中文表述均有所差别&#xff0c;所以直接使用英文名词表示)&#xff0c;此外还有两种表示坐标点的方式&#…...

Linux centos7 下载MySQL5.7仓库的命令

wget 是一个非常强大的命令行工具&#xff0c;用于从网络上下载文件。它是 Linux 和其他 Unix-like 系统中常用的工具之一。wget 命令的各个参数有着不同的含义&#xff0c;下面是您提供的命令 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.onarch.r…...

Java Serializable 序列化

Java的Serializable接口是Java序列化机制的核心&#xff0c;它允许一个对象的状态被转换为字节流&#xff0c;从而可以方便地进行存储或传输。 序列化后的对象可以被写到数据库、存储到文件系统&#xff0c;或者通过网络传输。 要在 Java 中使一个类可序列化&#xff0c;你需要…...

【QNX+Android虚拟化方案】136 - QNX 侧 Coredump 文件解析

【QNX+Android虚拟化方案】136 - QNX 侧 Coredump 文件解析 1. 初始化 QNX 开发环境2. 使用 gdb 解析 Coredump3. 查看 backtrace:bt4. 查看所有线程信息5. 打印线程19的回溯信息6. 打印所有线程的回溯信息7. gdb info 相关的指令8. 查看使用了哪些共享库9. 查看出错的行号及地…...

ORB-SLAM2 ---- 词袋模型BOW

文章目录 一、回环检测的重要性二、回环检测的方法三、词袋模型四、词典五、实例展示1. 计算评分2. 找出有相同单词的关键帧3. 用词袋进行快速匹配 六、总结 一、回环检测的重要性 在前面的学习我们知道&#xff0c;噪声的影响是不可消除的&#xff0c;而上一帧的误差不可避免的…...

win11无法检测到其他显示器-NVIDIA

https://www.nvidia.cn/software/nvidia-app/ https://cn.download.nvidia.cn/nvapp/client/11.0.1.163/NVIDIA_app_v11.0.1.163.exe 下载安装后&#xff0c;检测驱动、更新驱动。...

基于Java+Swing+Mysql的网络聊天室

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…...

docker安装Elasticsearch

公网即可拉取镜像&#xff0c;这个镜像是可以拉得到的&#xff0c;版本号根据自己需要的来 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.15运行命令&#xff0c;xxxxxxxxxxxxxxxxxxxxxxxx_password 为自己的密码 docker run -d --name elasticsearch \-…...

Elasticsearch入门之HTTP高级查询操作

前言 上一篇博客我们学习了es的一些基础操作如下&#xff1a; 创建索引&#xff08;创建表 create table&#xff09;查看索引&#xff08;查看表show tables&#xff09;查看单个索引&#xff08;查看单个表show create table&#xff09;删除索引&#xff08;删除表&#x…...

前端知识1html

VScode一些快捷键 Ctrl/——注释 !——生成html框架元素 *n——生成n个标签 直接书写html的名字回车生成对应的标签 常见标签 span&#xff1a; <span style"color: red;">hello</span> <span>demo</span> span实现&#xff1a; 标题…...

《黑神话:悟空》闪退,提示D3D12崩溃,游戏崩溃无法启动是什么原因?要怎么解决?

《黑神话&#xff1a;悟空》闪退、D3D12崩溃及游戏无法启动&#xff1a;原因、解决方案与预防措施 作为一名软件开发从业者&#xff0c;我深知电脑游戏运行时可能遇到的各种问题&#xff0c;尤其是像《黑神话&#xff1a;悟空》这样的高品质游戏&#xff0c;其对硬件和系统配置…...

[GESP202312 五级] 烹饪问题

题目传送门 B3930 [GESP202312 五级] 烹饪问题 题目描述 有 N N N 种食材&#xff0c;编号从 0 0 0 至 N − 1 N-1 N−1&#xff0c;其中第 i i i 种食材的美味度为 a i a_i ai​。 不同食材之间的组合可能产生奇妙的化学反应。具体来说&#xff0c;如果两种食材的美味…...

[代码随想录10]栈和队列

前言 栈和队列在STL中扮演的什么角色呢&#xff1f;我们知道STL的六大组件是&#xff1a;容器&#xff0c;适配器&#xff0c;算法&#xff0c;迭代器&#xff0c;空间配置器&#xff0c;仿函数&#xff0c;而我们今天要学的栈和队列就是属于适配器里面的&#xff0c;为什么栈和…...

TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面

前言 前篇文章使用Tesseract进行图片文字识别介绍了如何安装TesseractOCR与TesseractOCR的命令行使用。但在日常使用过程中&#xff0c;命令行使用还是不太方便的&#xff0c;因此今天介绍一下如何使用WPF/C#构建TesseractOCR简单易用的用户界面。 普通用户使用 参照上一篇教…...

Java、JavaWeb、数据库-图书管理系统

这一章主要是把上一章写在网页里的java 代码从网页中分离出来&#xff0c;放在专门的servlet类中。每一个servlet类对应一个数据库的表。 规范性问题&#xff1a; 1、dao包存放有关数据库的信息&#xff1a;BaseDao包就放数据库加载驱动和增删改和关闭资源&#xff1b;而其他…...

轻量化特征融合 | YOLOv8 引入一种基于增强层间特征相关性的轻量级特征融合网络 | 北理工新作

本改进已同步到Magic框架 摘要—无人机图像中的小目标检测由于分辨率低和背景融合等因素具有挑战性,导致特征信息有限。多尺度特征融合可以通过捕获不同尺度的信息来增强检测,但传统策略效果不佳。简单的连接或加法操作无法充分利用多尺度融合的优势,导致特征之间的相关性不…...

U盘文件乱码:原因、恢复、预防与总结

U盘文件乱码现象解析 U盘作为我们日常生活中常用的便携式存储设备&#xff0c;时常会遭遇文件乱码的问题。这种乱码现象通常表现为文件名变成一堆无意义的字符&#xff0c;文件内容无法正常查看&#xff0c;甚至文件根本无法被打开。当我们在电脑上插入U盘&#xff0c;准备查看…...

OpenStack介绍

OpenStack概述 OpenStack是一个开源的云计算管理平台软件,主要用于构建和管理云计算环境。它允许企业或组织通过数据中心的物理服务器创建和管理虚拟机、存储资源和网络等云计算服务。其核心组件包括计算(Nova)、网络(Neutron)、存储(Cinder、Swift)等。这些组件相互协作…...

OpenGL编译用户着色器shader

shader相信很多朋友们都听说过&#xff0c;shader就是运行再GPU上的程序。虽然是这么说&#xff0c;但是我们发现&#xff0c;很多IDE开发工具比如说visual studio 没有办法直接去运行shader代码。这是因为&#xff0c;许多编译器不会自动将shader文件编译成可执行的代码然后发…...

C++ 已经知道,中序和后序,推算前序的方法。

已经知道&#xff0c;中序和后序&#xff0c;推算前序的方法。 #include<iostream> using namespace std; string ldr_str,lrd_str;//中序遍历和后序遍历 void build(int l1,int r1,int l2,int r2){if(l1>r1) return ;//边界条件,说明已经没有元素了cout<<lrd_s…...

unity打包到安卓帧率降低

这个问题遇到过很多次了我的做法就是直接设置Application.targetFrameRate60 参考...

计算机网络复习——概念强化作业

物理层负责网络通信的二进制传输 用于将MAC地址解析为IP地址的协议为RARP。 一个交换机接收到一帧,其目的地址在它的MAC地址表中查不到,交换机应该向除了来的端口外的所有其它端口转发。 关于ICMP协议,下面的论述中正确的是ICMP可传送IP通信过程中出现的错误信息。 在B类网络…...

DO、DTO、VO都是干什么的?

DO、DTO、VO 是三个常见的Java 对象&#xff0c;它们都是用来承载数据的&#xff0c;但是在不同的场景下有着不同的用途. 1.DO(Domain Object):领域对象&#xff0c;也称为实体对象。D0 通常用于数据库表的映射&#xff0c;DO中包含了实体的属性以及对实体的操作方法。DO 对应…...

深入探索 Node.js:构建强大的后端应用

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在…...

【Agent】构建智能诗歌创作系统:基于多 Agent 的协同创作实现

在探索大语言模型的创意应用过程中&#xff0c;我们开发了一个基于多 Agent 的智能诗歌创作系统。本文将介绍如何通过多个专业化的 Agent 协同工作&#xff0c;实现根据地点和天气信息自动创作诗歌的功能。 GitHub Code 项目地址 核心架构设计 1. Agent 基类设计 from pydan…...

【Git】:远程操作

目录 新建远程仓库 克隆远程仓库 向远程仓库推送 拉取远程仓库 配置 Git 忽略特殊文件 给命令配置别名 我们可以自己搭建⼀台运行 Git 的服务器&#xff0c;不过现阶段&#xff0c;为了学 Git 先搭个服务器绝对是小题大作。好在这个世界上有个叫 GitHub 的神奇的网站&#xff0…...

服务器数据恢复—LINUX下各文件系统删除/格式化的数据恢复可行性分析

Linux操作系统是世界上流行的操作系统之一&#xff0c;被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统&#xff08;EXT2/EXT3/EXT4/Reiserfs/Xfs&#xff0…...

基于python django的药材数据可视化系统的设计与实现,可对各类药材数据做一个统计分析可视化

研究背景 随着中医药文化的不断传承与发展&#xff0c;传统中药材的市场需求逐渐增加。然而&#xff0c;随着药材种类繁多、来源复杂、品质参差不齐&#xff0c;如何高效地管理、分析与展示中药材的相关数据&#xff0c;成为现代中药产业面临的重要课题。传统的药材数据管理方…...

docker及docker exec命令学习笔记

docker exec 是一个常用的 Docker 命令&#xff0c;允许你在已经运行的容器中执行命令或启动新的进程。以下是详细介绍和常见用法&#xff1a; 基本语法 docker exec [OPTIONS] CONTAINER COMMAND [ARG...]参数详解 1. CONTAINER指定目标容器的名字或容器 ID。可以通过以下命…...

【pyspark学习从入门到精通24】机器学习库_7

目录 聚类 在出生数据集中寻找簇 主题挖掘 回归 聚类 聚类是机器学习中另一个重要的部分&#xff1a;在现实世界中&#xff0c;我们并不总是有目标特征的奢侈条件&#xff0c;因此我们需要回归到无监督学习的范式&#xff0c;在那里我们尝试在数据中发现模式。 在出生数据…...

Unity 策略游戏地图上的网格是如何实现的

在Unity中实现策略游戏地图上的网格&#xff0c;主要涉及到地图数据的处理、地图的加载与渲染、以及玩家在地图上的移动与碰撞检测等关键步骤。以下是对这些步骤的详细解释&#xff1a; 一、地图数据的处理 收集地图数据&#xff1a;这包括地形高度、地形纹理、建筑物、树木等…...

【MySQL 进阶之路】锁详解

MySQL 锁详解 1. 锁的基本概念 锁在数据库中是用来保证数据一致性和防止并发冲突的一种机制。MySQL 中的锁可以分为不同的类型和粒度&#xff0c;每种锁都有特定的使用场景和特点。了解锁的类型、作用以及如何避免锁带来的问题是提升数据库性能和避免数据冲突的关键。 2. 锁…...

RK3588--解码H264(mpp-dec-h264-to-yuv-file)

1. 简介 源码下载:https://download.csdn.net/download/mao0514/90096131 本例完成H264格式文件解码,并保存为yuv格式文件。参考mpp_dec_test重写,进行了一部分精简。 瑞芯微提供的媒体处理软件平台(Media Process Platform,简称 MPP)是适用于瑞芯微芯片系列的 通用媒体…...

解决Conda虚拟环境中pip下载包总是到base环境的问题

conda本地创建的虚拟环境使用pip安装一些包总是安装到base环境中&#xff0c;导致无法正确进行环境隔离&#xff0c;下面是一些解决办法 方法一、使用python -m pip安装 1.1、验证虚拟环境的pip版本是哪个版本&#xff0c;如下所示&#xff0c;本人的demo虚拟环境直接使用pip…...

PyCharm 中设置虚拟环境

在 PyCharm 中设置虚拟环境的步骤如下&#xff1a; 1. 创建新项目时设置虚拟环境 1. 打开 PyCharm 并选择 New Project。 2. 在 Location 中指定项目路径。 3. 在右侧的 Python Interpreter 下&#xff0c;选择 New Environment。 Environment: 选择 Virtualenv。 Loca…...

M9484C VXG 矢量信号发生器- 110GHz-

M9484C VXG 矢量信号发生器 - 110GHz- M9484C VXG 是一款矢量信号发生器&#xff0c;在每个通道上提供 2.5 GHz 调制带宽&#xff0c;能够生成高达 54 GHz 的信号。 这款 VXG 矢量信号发生器可以组成经过校准和同步的全方位综合解决方案&#xff0c;帮助您更快测试下一代无线…...

机器学习详解(3):线性回归之代码详解

文章目录 1 数据预处理2 构建线性回归模型并绘制回归线初始化方法前向传播&#xff1a;forward_propagation代价函数&#xff1a;cost_function反向传播&#xff1a;backward_propagation参数更新&#xff1a;update_parameters训练方法&#xff1a;train代码运行结果 3 使用Py…...

工业检测基础-工业相机选型及应用场景

以下是一些常见的工业检测相机种类、检测原理、应用场景及选型依据&#xff1a; 2D相机 检测原理&#xff1a;基于二维图像捕获&#xff0c;通过分析图像的明暗、纹理、颜色等信息来检测物体的特征和缺陷.应用场景&#xff1a;广泛应用于平面工件的外观检测&#xff0c;如检测…...

标准状态下一个气体分子每秒平均碰撞次数的估算

要估算在标准状态&#xff08;0C, 1个大气压&#xff09;下&#xff0c;一个气体分子在1秒内与其他分子的碰撞次数&#xff0c;我们可以使用一些基本的物理和化学原理。这个过程涉及到气体动力学理论&#xff0c;特别是麦克斯韦-玻尔兹曼分布。 计算气体分子的平均速率&#xf…...

使用PHPUnit使用本地调试代替远程调试,快速提高开发效率

Laravel 是一个在 Linux 环境下表现非常出色的 PHP 框架&#xff0c;但它在 Windows 环境下可能会遇到一些兼容性和配置问题。为了调试或没试的方便可以在 Windows 环境下进行 Laravel PHPUnit进行本地调试和测试。 本地主要针对断点调试效果非常高效。 在 Laravel 中&#x…...

Android 镜像模式和扩展模式区别探讨-Android14

Android 镜像模式和扩展模式区别探讨 1、区分镜像模式和扩展模式1.1 扩展屏是否有显示内容1.2 镜像模式显示条件 2、镜像模式界面 同屏显示和异屏显示探讨DisplayManagerService启动及主屏添加-Android13 Android主副屏显示-Android14 1、区分镜像模式和扩展模式 LogicalDispla…...

链表头文件大更新!!!

引言 原文章:链表简介及自制链表操作头文件_自己写一个链表头文件-CSDN博客。 此次更新添加了更多功能&#xff0c;让改头文件更 人性化 。 安装教程见原文章。 介绍 linked_list.h 头文件 linked_list.h 是一个 C 头文件&#xff0c;定义了一个模板类 LinkedList&#xff…...

ROS2创建 base 包用于其他模块的参数配置和头文件依赖

Demo 背景 ROS2项目开发中存在以下需求&#xff1a;有多个包需要读取一些共同的配置项(以txt或者yaml形式存在&#xff09;&#xff0c;且依赖于一些公用的utils工具代码(C)。Solution: 创建一个 base_config 包来“存放” 配置文件和公用的头文件。gitee address: Gitee/CDal…...

设计模式の软件设计原则

文章目录 前言一、聚合&组合&继承&依赖1.1、继承1.2、组合1.3、聚合1.4、依赖 二、单一职责原则2.1、单一职责原则反面案例2.2、单一职责原则反面案例的改进 三、接口隔离原则3.1、接口隔离原则反面案例3.2、接口隔离原则反面案例的改进 四、依赖倒转原则4.1、依赖…...

【python自动化四】日志打印

我们在进行自动化测试时&#xff0c;需要打印过程日志和结果日志等&#xff0c;这里记录下日志的相关配置。这里我们直接自己新建一个logger。 先贴上日志代码如下&#xff0c;可根据需要修改&#xff1a; import logging import os import timefrom logging.handlers import …...