写端口-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…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...