写端口-tcp udp不同方式发包和接包
最近一直在学习网络编程,今天把 socket部分做一个总结。
Python 的socket库可以实现不同协议不同地址的发包和收包,无奈资料很少,官方例子有限,大神博客很少提及, 经过一番尝试后,总结以下几点用法以便大家以后使用。
client端
import socket
import time
import random
import string# 定义一些常量,变量名可以变。自己好记就行
buffer = 1024 # 发送缓冲区大小,这里是1KB
data_size = 128 # 每个UDP数据包的大小
bandwidth = 1 # 目标带宽,1 Mbps
PACKETS_PER_SECOND = bandwidth * 1024 * 1024 / (8 * data_size) # 计算每秒需要发送的数据包数量# 目标服务器的IP和端口
SERVER_IP = '127.0.0.1' # 请替换为实际服务器IP
SERVER_PORT = 1245 # 请替换为实际端口def generate_random_data(size):"""生成随机数据,生成往UDP包中放的随机值"""return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(size)).encode()def udp_main():# 创建UDP套接字client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)print(f"Starting UDP bandwidth test to {SERVER_IP}:{SERVER_PORT} aiming for {bandwidth} Mbps...")start_time = time.time()packets_sent = 0try:while True:# 生成随机数据data = generate_random_data(data_size)# 发送数据包client_socket.sendto(data, (SERVER_IP, SERVER_PORT))#包计数packets_sent += 1# 控制发送速率以达到目标带宽elapsed_time = time.time() - start_timeif elapsed_time >= 1:#实际带宽,怎么算需要记一下actual_bandwidth = (packets_sent * data_size * 8) / (elapsed_time * 1024 * 1024)print(f"Actual bandwidth: {actual_bandwidth:.2f} Mbps")#重新计算包packets_sent = 0start_time = time.time()time.sleep(1 / PACKETS_PER_SECOND) # 等待,控制发送频率except KeyboardInterrupt:print("\nBandwidth test interrupted by user.")finally:client_socket.close()def tcp_main():client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)client_socket.connect((SERVER_IP, SERVER_PORT))start_time = time.time()packets_sent = 0try:while True:data = generate_random_data(data_size)client_socket.send(data)packets_sent += 1elapsed_time = time.time() - start_timeif elapsed_time >= 1:client_socket.send("q".encode())packets_sent = 0start_time = time.time()acutalwidth = (packets_sent * data_size * 8) / (elapsed_time * 1024 * 1024)print(f"Actual bandwidth: {acutalwidth:.2f} Mbps")time.sleep(1/PACKETS_PER_SECOND)except KeyboardInterrupt:print("\nBandwidth test interrupted by user.")finally:client_socket.close()if __name__ == "__main__":tcp_main(
server端
import socketdef Server_Socket():serverip = "0.0.0.0"serverport = 8080#1、2 创建UDP的socketserver_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)server_socket.bind((serverip,serverport))print(f"udp server {serverip}:{serverport}")try:while True:#3、接收客户端发来的值data,addr = server_socket.recvfrom(1024)print(f"recv from {addr}:{data.decode('utf-8')}") #print的内容不用背except KeyboardInterrupt:print("^C received, shutting down the server") #无所谓不用背具体详情finally:server_socket.close()def TCP_socket():serverip = "127.0.0.1"serverport = 1245server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)server_socket.bind((serverip,serverport))print(f"start listening:")server_socket.listen(1024)print(f"tcp socket: {serverip}:{serverport}")try:dataconn,addr = server_socket.accept()print(f"client{dataconn}:{addr}")while True:data = dataconn.recv(1024)print(f"recv from {addr},recv data:{data.decode('utf-8')}")if data.decode('utf-8') == "q":breakdataconn.send("已送达".encode('utf-8'))except KeyboardInterrupt:print("^C received, shutting down the server")finally:server_socket.close()if __name__ == "__main__":TCP_socket()相关文章:
写端口-tcp udp不同方式发包和接包
最近一直在学习网络编程,今天把 socket部分做一个总结。 Python 的socket库可以实现不同协议不同地址的发包和收包,无奈资料很少,官方例子有限,大神博客很少提及, 经过一番尝试后,总结以下几点用法以便大家…...
计算机的错误计算(一百二十)
摘要 探讨在许多应用中出现的函数 的计算精度问题。 例1. 考虑在许多应用中出现的函数 计算 不妨在Python下计算: 若用下列Rust代码在线计算: fn f(x: f64) -> f64 {(x.exp() - 1.0) / x }fn main() {let result f(0.9e-13);println!("…...
Spring Boot 中使用 JSON Schema 来校验复杂 JSON 数据
博客主页: 南来_北往 系列专栏:Spring Boot实战 在现代软件开发中,尤其是构建 RESTful API 时,处理 JSON 数据已成为一项基本任务。JSON(JavaScript Object Notation)因其轻量级和易于人类阅读的特点ÿ…...
QT实现Opencv图像处理
案例 基于QT的人脸识别 pro文件需要加以下代码 INCLUDEPATH E:/opencv/opencv3.4-qt-intall/install/include INCLUDEPATH E:/opencv/opencv3.4-qt-intall/install/include/opencv INCLUDEPATH E:/opencv/opencv3.4-qt-intall/install/include/opencv2 LIBS E:/opencv/o…...
刚转Mac的新手如何卸载不需要的应用程序
最开始转Mac系统的时候很是苦恼,到底该怎么卸载App啊,App直接拖到废纸篓真的能卸载干净吗,卸载App时会不会留下一些文件残留,慢慢的会不会占满内存,于是我找到了一个免费的卸载工具——XApp。 这是一款Mac应用程序卸载…...
Unity 3d 继承MonoBahaviour的单例
在使用Unity3d开发游戏或做客户端项目时,单例是最常见的模式之一,他简单了类的创建,在代码中可以直接调用。下面是两个例子,代码两种不同类型的单例,一个是基本类的单例基类,不是unity MonoBehaviour的类都…...
grafana version 11.1.0 设置Y轴刻度为1
grafana 版本 # /usr/share/grafana/bin/grafana --version grafana version 11.1.0设置轴 Axis 搜索 Standard options 在"Decimals"中输入0,确保只显示整数...
Elasticsearch的安装与配置
注意:elasticsearch 禁止安装在/root路径下! 1、创建用户组 groupadd elastic 2、创建用户 useradd es -d /home/es -g elastic echo es | passwd es --stdin 3、给新创建的用户进行授权 chown -R es:elastic /home/es chmod -R 775 /home/es 4…...
win0删除 Windows.old
参考:https://blog.csdn.net/xitongzhijia_abc/article/details/126270452 win10如下所示: 打开 设置–>系统—>存储...
常见IDE及其编译器的讲解
IDE 意思是:集成开发环境 常见的IDE有哪些? eg. devC,VS2022,xcode,codeblocks,clion常见编译器有哪些? eg.msvc,gcc,clang微软的底层编译器是msvc苹果的底层编译器是clang IDE编译器特点devC集成了gcc小巧,工具简单&…...
用SQLyog连接mysql提示2058错误
1)在cmd下(必须是这个,不能是gitbash) // step1:修改下数据库 C:\Users\elex>mysql -uroot -p Enter password: **** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 97 Server version: 8.1.0 MySQL Community Server - GPLCopy…...
Web集群服务-Nginx
1. web服务 1. WEB服务:网站服务,部署并启动了这个服务,你就可以搭建一个网站 2. WEB中间件: 等同于WEB服务 3. 中间件:范围更加广泛,指的负载均衡之后的服务 4. 数据库中间件:数据库缓存,消息对列 2. 极速上手指南 nginx官网: nginx documentation 2.1 配置yum源 vim /etc/…...
获取时隔半个钟的三天
摘要: 今天遇到需求是配送时间,时隔半个钟的排线!所以需要拼接时间!例如2024-10-08 14:30,2024-10-08 15:00,2024-10-08 15:30 <el-form-item label"配送时间&a…...
构建可以ssh连接的容器镜像
构建可以ssh连接的容器镜像 构建可以通过ssh进行连接容器镜像,实现远程登录容器的目的。 ubuntu ssh容器镜像 你可以使用以下Dockerfile来构建一个可以SSH的容器镜像: FROM ubuntu:20.04MAINTAINER lldhsds# 配置apt国内源 COPY sources.list /etc/a…...
数据库中JOIN的用法?
在数据库中,JOIN 操作用于结合来自两个或多个表的数据,基于它们之间的相关列。JOIN 是关系数据库查询中一个非常重要的功能,允许你从多个表中提取相关的数据。以下是几种常见的 JOIN 类型及其用法: INNER JOIN: 返回两个表中匹配的…...
java项目之纺织品企业财务管理系统源码(springboot+vue+mysql)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的纺织品企业财务管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于spring boot…...
C语言 编程练习:解决五个有趣的问题
文章目录 编程练习:解决五个有趣的问题1. 出租车费用计算器1. 1 代码code 2. 成绩转换统计2. 1 代码code 3. 交错序列求和3. 1 代码code 4. 阶乘序列求和4. 1 代码code 5. 输出星号图案5. 1 代码code 编程练习:解决五个有趣的问题 在编程的世界里&#…...
二、安装vmtools
1、 介绍 vmtools 安装后,可以让我们在 windows 下更好的管理 vm 虚拟机。可以设置 windows 和 centos 的共享文件夹 当时当我们发现安装虚拟机工具位置是灰色的 右击打开终端 在终端输入命令 yum list installed | grep open-vm-*yum list installed 命令会列出…...
用echarts画天气预报
如图 上代码 <template><div id"temp15day"></div> </template><script setup> import * as echarts from "echarts"; const initChart () > {const machart echarts.init(document.getElementById("temp15day&q…...
如果要存IP地址,用什么数据类型比较好?(java)
存储IP地址需要考虑到IPv4和IPv6的不同特点,以及系统的需求。我们可以从字符串、整数和二进制三种常用方式来讨论如何高效存储和处理IP地址。 1. IPv4存储 1.1 字符串存储 优点:直观易读,简单易用。缺点:占用更多的存储空间&am…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
