python网络基础 udp相关笔记

本文深入解析网络通信的基础概念,包括IP地址、网络端口的作用及重要性,详细阐述Socket的工作原理和应用,以及UDP协议的特点与应用场景,适合网络编程初学者。

网络基础
基础了解
IP地址 : 如何在网络中标识一台终端设备(计算机、手机)
发送数据的计算机的地址和接受数据的计算机的地址。就象人们为了通信的方便给每一台计算机都事先分配一个类似我们日常生活中的电话号码一样的标识地址,该标识地址就是我们所要介绍的IP地址。
网络端口 : 在同一台计算机上的多个服务器如何公用网络而不发生冲突
我们知道一台主机(对应一个IP地址)可以提供很多服务,比如web服务,ftp服务等等。如果只有一个IP,无法却分不同的网络服务,所以我们采用”IP+端口号”来区分不同的服务。
协议 : 不同的计算机通信怎么才能互相理解 需要使用相同的协议
数据的格式是怎样的,以什么样的控制信号联络,具体传送方式是什么,发送方怎样保证数据的完整性、正确性,接收方如何应答等等。
完成进程间通讯的一种规范
Socket
概念
Socket是BSD UNIX的进程通讯机制,通常称作“套接字”,用于描述IP地址和端口,是一个通讯链的句柄,可以实现不同虚拟机和不同服务器之间的通讯
Socket本质上是“编程接口(API)”,对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket的编程接口
HTTP是汽车,提供了封装或者显示数据的具体形式,Socket是发动机,提供了网络通讯的能力
最重要的是,Socket是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的Socket系统调用
连接过程分成三个阶段,服务器监听,客户端请求,连接确认
创建Socket
引入socket模块
创建socket对象
socket函数有两个参数
第一个参数 : Address Family
AF_INET : Internet进程通信
AF_UNIX : 用于同一台机器进程间通信
实际工作中使用AF_INET
第二个参数 : Type
SOCK_STREAM : 流式套接字 主要用于TCP协议
SOCK_DGRAM : 数据报套接字 主要用于UDP
UDP
概念
用户数据报协议
是一个无连接的简单的面向数据报的传输层协议
UDP不提供可靠性,他只是把应用程序传给IP层的数据报发送出来,但是不能保证他们到达目的地
由于UDP在传输数据报前不用在客户和服务器之间建立连接,并且没有超时重发机制,所以速度很快
用于方向
屏幕广播
QQ
微信
SNMP(简单网络管理协议)
TFTP(简单文件传送)
DNS(域名解释)
涉及到的模块
Socket
使用UDP
UTP发送消息
引入Socket模块
有一个Socket的模块
引入的时候为了方便,将模块中所有的内容都进行引入
实例 : from socket import *
创建套接字
初见出一个UDP套接字
第一个参数传递 : AF_INET()Internet网进程通信
第二个参数传递 : SOCK_DGRAM(数据报套接字,主要用于UDP)
实例 : udp_Socket = socket(AF_INET,SOCK_DGRAM)
准备官方地址
定义元组,存储IP地址和端口号
第一个元素是lIP地址
第二个元素是端口号
dest_arrt = (‘192.168,.22.83’,‘88888’)
从键盘中获取数据
从键盘中获取元素
在键盘中输出要发送的内容
send_data = input(‘请输入要发送的数据’)
发送数据
将数据处理后发送到程序中去
udp_Socket.sendto() 函数
第一个参数传递 : 采集的数据,如果需要处理要进行处理
一般变量、标量默认为unicode字符
在上传的时候不识别这些标量
但是我们使用时一般使用utf-8或者gbk
所以,数据要经过处理
对象.encode(“gbk”)
第二个参数传递 : 要上传的官方地址
关闭资源 : 在使用资源后要关闭资源,免得内存造成浪费
实例
from socket import *
udp_socket = socket(AF_INET,SOCK_DGRAM)
path = (‘192.168.22.83’,6666)
data = input(“请输入发送内容”)
udp_socket.sendto(data.encode(‘gbk’),path)
udp_socket.close()
UTP接受消息
概念
这样UDP就可以收发数据,进行互动了
在发送数据的后面加上接收数据
接收数据与发送数据相差不大
接收数据
等待对方接收数据
如果没有收到数据则会阻塞等待,只到收到数据
get_data = udp_socket.recvfrom()
传递一个参数 : 参数是接收数据的最大字节数
接收的结果
接收到数据的结果是一个元组
元组中的第一个元素是接收的数据
元组中的第二个元素是发送方的IP地址和端口号
接收过来的数据需要进行解码
如果不解码,那么默认是16进制数据
print(get_data[0].decode(‘gbk’))
print(get_data[1])
实例
from socket import *
udpSocket = socket(AF_INET,SOCK_DGRAM)
path = (‘192.168.22.83’,8080)
content = input()
udpSocket.sendto(content.encode(‘gbk’),path)
getData = udpSocket.recvfrom(1024)
print(getData[0].decode(‘gbk’))
udpSocket.close()
绑定端口
原因
在我们收发信息的时候
接收数据的时候,端口是经常变化的
对收发数据并不是很方便
所以,对接收时候的端口进行统一
创建一个官方地址
就像发送数据一样,创建一个元组
元组内两个元素
第一个元素是IP地址
第二个元素是端口号(固定的)
getPath = (‘192.168.22.83’,9999)
锁定端口
使用bind方法
udpSocket.bind(getPath)
实例
from socket import *
udp = socket(AF_INET,SOCK_DGRAM)
getPath = (‘192.168.22.83’,8888)
udp.bind(getPath)
getDate = udp.recvfrom(1024)
print(getDate[0].decode(‘gbk’))
udp.close()
echo服务器
概念
回声服务器
服务器是当你发送出信息的时候
对方给与你的回应
实例
from socket import *
udp = socket(AF_INET,SOCK_DGRAM)
path = (‘192.168.22.83’,9999)
udp.bind(path)
while True:
getData = udp.recvfrom(1024)
echo = “您拨打的用户不在,请稍后再拨\n”
udp.sendto(echo.encode(‘gbk’),getData[1])
udp.close()

MATLAB代码实现了一个基于多种智能优化算法优化RBF神经网络的回归预测模型,其核心是通过智能优化算法自动寻找最优的RBF扩展参数(spread),以提升预测精度。 1.主要功能 多算法优化RBF网络:使用多种智能优化算法优化RBF神经网络的核心参数spread。 回归预测:对输入特征进行回归预测,适用于连续值输出问题。 性能对比:对比不同优化算法在训练集和测试集上的预测性能,绘制适应度曲线、预测对比图、误差指标柱状图等。 2.算法步骤 数据准备:导入数据,随机打乱,划分训练集和测试集(默认7:3)。 数据归一化:使用mapminmax将输入和输出归一化到[0,1]区间。 标准RBF建模:使用固定spread=100建立基准RBF模型。 智能优化循环: 调用优化算法(从指定文件夹中读取算法文件)优化spread参数。 使用优化后的spread重新训练RBF网络。 评估预测结果,保存性能指标。 结果可视化: 绘制适应度曲线、训练集/测试集预测对比图。 绘制误差指标(MAE、RMSE、MAPE、MBE)柱状图。 十种智能优化算法分别是: GWO:灰狼算法 HBA:蜜獾算法 IAO:改进天鹰优化算法,改进①:Tent混沌映射种群初始化,改进②:自适应权重 MFO:飞蛾扑火算法 MPA:海洋捕食者算法 NGO:北方苍鹰算法 OOA:鱼鹰优化算法 RTH:红尾鹰算法 WOA:鲸鱼算法 ZOA:斑马算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值