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

写端口-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)因其轻量级和易于人类阅读的特点&#xff…...

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/…...

获取时隔半个钟的三天

摘要&#xff1a; 今天遇到需求是配送时间&#xff0c;时隔半个钟的排线&#xff01;所以需要拼接时间&#xff01;例如2024-10-08 14&#xff1a;30&#xff0c;2024-10-08 15&#xff1a;00&#xff0c;2024-10-08 15&#xff1a;30 <el-form-item label"配送时间&a…...

构建可以ssh连接的容器镜像

构建可以ssh连接的容器镜像 构建可以通过ssh进行连接容器镜像&#xff0c;实现远程登录容器的目的。 ubuntu ssh容器镜像 你可以使用以下Dockerfile来构建一个可以SSH的容器镜像&#xff1a; FROM ubuntu:20.04MAINTAINER lldhsds# 配置apt国内源 COPY sources.list /etc/a…...

数据库中JOIN的用法?

在数据库中&#xff0c;JOIN 操作用于结合来自两个或多个表的数据&#xff0c;基于它们之间的相关列。JOIN 是关系数据库查询中一个非常重要的功能&#xff0c;允许你从多个表中提取相关的数据。以下是几种常见的 JOIN 类型及其用法&#xff1a; INNER JOIN: 返回两个表中匹配的…...

java项目之纺织品企业财务管理系统源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的纺织品企业财务管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于spring boot…...

C语言 编程练习:解决五个有趣的问题

文章目录 编程练习&#xff1a;解决五个有趣的问题1. 出租车费用计算器1. 1 代码code 2. 成绩转换统计2. 1 代码code 3. 交错序列求和3. 1 代码code 4. 阶乘序列求和4. 1 代码code 5. 输出星号图案5. 1 代码code 编程练习&#xff1a;解决五个有趣的问题 在编程的世界里&#…...

二、安装vmtools

1、 介绍 vmtools 安装后&#xff0c;可以让我们在 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的不同特点&#xff0c;以及系统的需求。我们可以从字符串、整数和二进制三种常用方式来讨论如何高效存储和处理IP地址。 1. IPv4存储 1.1 字符串存储 优点&#xff1a;直观易读&#xff0c;简单易用。缺点&#xff1a;占用更多的存储空间&am…...

扛住十万并发的“冷面保安”:一文扒透限流的四大经典算法与代码实战

在高并发架构中&#xff0c;如果说缓存和 MQ 是替服务器扛伤害的“防弹衣”&#xff0c;那么限流&#xff08;Rate Limiting&#xff09;就是守在系统大门外的“冷面保安”。他的核心逻辑极其冷酷&#xff1a;不管外面排队的人有多急&#xff0c;只要超过了系统的最大接待能力&…...

英雄联盟录像编辑终极指南:5分钟掌握免费开源工具League Director

英雄联盟录像编辑终极指南&#xff1a;5分钟掌握免费开源工具League Director 【免费下载链接】leaguedirector League Director is a tool for staging and recording videos from League of Legends replays 项目地址: https://gitcode.com/gh_mirrors/le/leaguedirector …...

Ardupilot无人船新手必看:从遥控器开关到地面站,3档模式设置保姆级教程

Ardupilot无人船控制模式全解析&#xff1a;从基础配置到高阶应用实战 第一次接触Ardupilot无人船时&#xff0c;最让人困惑的莫过于各种控制模式的区别与适用场景。作为开源自动驾驶系统的标杆&#xff0c;Ardupilot为无人船提供了多达14种控制模式&#xff0c;每种模式都有其…...

快速 AI 迭代仍然需要操作纪律

前言 配套资源&#xff1a;AI 辅助开发检查清单资源包&#xff0c;适合把本文的流程直接落成开发前检查表和复盘模板。 上一篇文章里&#xff0c;我把 AI 工作流拆成了几类任务模式&#xff1a;开发维护、探索学习、反馈确认。这个分类解决的是一个前置问题&#xff1a;在使用 …...

TC2526 低功耗原边反馈开关电源芯片

概述 TC2526 是一款低功耗原边反馈&#xff08;PSR&#xff09;开关电源芯片&#xff0c;其内部集成了大功率 BJT 管&#xff0c;适用于隔离型的高效低功耗便携式设备充电器应用。TC2526 采用独特具有恒流恒压功能的原边反馈控制技术&#xff0c;以及独特的轻载调频技术降低轻载…...

Perplexity接入知网文献搜索的5大避坑指南:实测发现92%研究者正在浪费87%检索时间

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity接入知网文献搜索的底层逻辑与认知重构 Perplexity 作为基于大语言模型的实时问答引擎&#xff0c;其核心能力并非仅依赖于内部参数化知识&#xff0c;而是通过动态检索增强生成&#xff08;…...

暗黑破坏神2存档编辑器d2s-editor:架构深度解析与实战应用指南

暗黑破坏神2存档编辑器d2s-editor&#xff1a;架构深度解析与实战应用指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 在暗黑破坏神2的深度游戏体验中&#xff0c;玩家常常面临角色build测试、装备获取耗时、游戏进度调整等…...

2026 年软硬两用床垫,为何能做到不塌陷?

引言随着科技的不断进步和消费者需求的多样化&#xff0c;床垫市场也在不断创新。特别是软硬两用床垫&#xff0c;因其能够满足不同人群的需求而备受青睐。然而&#xff0c;如何确保床垫在长时间使用后不塌陷&#xff0c;仍然是一个技术难题。本文将探讨2026年软硬两用床垫如何…...

手把手拆解FD-SOI工艺流程:从SOI衬底到应变硅外延的保姆级图解

从SOI衬底到应变硅外延&#xff1a;FD-SOI工艺全流程拆解指南 想象一下建造一座微型城市&#xff0c;每一栋建筑只有头发丝直径的万分之一大小。这就是FD-SOI工艺工程师的日常工作——在硅片上用原子级精度"建造"晶体管。与传统的体硅工艺不同&#xff0c;FD-SOI&…...

Linux应用目录规范实战指南

Linux应用目录规范实战指南本文面向具备一定 Linux 基础的技术人员&#xff0c;围绕应用目录规范展开&#xff0c;重点讨论配置目录、数据目录和日志目录职责分离。在中级运维和系统管理工作中&#xff0c;这类主题常常与配置变更、资源状态、权限边界、自动化任务和业务影响交…...