AI应用开发-python实现UDP报文通信

AI应用开发相关目录

本专栏包括AI应用开发相关内容分享,包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧
适用于具备一定算法及Python使用基础的人群

  1. AI应用开发流程概述
  2. Visual Studio Code及Remote Development插件远程开发
  3. git开源项目的一些问题及镜像解决办法
  4. python实现UDP报文通信

文章目录


一、UDP通信

UDP(User Data Protocol,用户数据报协议)是一种面向无连接的协议,在通信时发送端和接收端不用建立连接。UDP提供了一种简单的方式,将数据从源地址发送到目的地址,并且每个数据报都是一个独立的信息,包括完整的源地址或目的地址。

UDP的主要特点如下:

  • 无连接:在传输数据之前,UDP不会在源端和终端之间建立连接。数据发送端简单地去抓取来自应用程序的数据,并尽可能快地把它发送到网络上。由于不需要建立连接,一台服务机可同时向多个客户机传输相同的消息。
  • 不可靠性:UDP不保证数据的可靠传输。当发送端发出数据报后,并不能确定数据是否成功送达目的地。如果数据在传输过程中丢失或损坏,接收端可能无法正确地接收到数据。
  • 面向报文:UDP以报文为单位进行传输。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。

AI应用开发往往落地在一定小范围内的机群,分析服务、应用服务、数据采集、用户站端有可能运行在同一局域网内的不同机器上,为保证服务的正常进行,可采用UDP报文通信的方式快捷实现服务流通。

小tips:

python的UUID生成

import uuid

uuid_str=str(uuid.uuid4())


二、代码示例

sockt实现UDP对xml报文的发送

cpp 复制代码
def generate_xml(alarm, dw_code, bdz_code, zxt, time_str,node_json,stationinfo_json,zxts):
    raw_string = """<?xml version="1.0" encoding="UTF-8"?>
    <Message>
        <Type>YCAlarm</Type>
        <YCAlarm>
            <Alarmtype>3003</Alarmtype>
            <Alarmlevel>1</Alarmlevel>
            <Name>{dw_code}</Name>
            <Des>{dw_name}</Des>
            <Substation>{bdz_code}</Substation>
            <Subsystem>{zxt}</Subsystem>
            <Hisalarmcode>{uuid}</Hisalarmcode>
            <Status>1</Status>
            <Time>{time_str}</Time>
            <Info>{text}</Info>
        </YCAlarm>
    </Message> 
    """.format(dw_code=dw_code,
               dw_name=node_json[dw_code],
               bdz_code=bdz_code,
               zxt=zxts[dw_code],
               uuid=str(uuid.uuid4()),
               time_str=time_str,
               text=stationinfo_json[bdz_code][0] + ':' + alarm)

    # 将生成的XML内容返回
    # 将字符串解析为XML对象
    root = ET.fromstring(raw_string)
    xml_string = ET.tostring(root, encoding='utf-8').decode('utf-8')

    # 解析XML内容
    # root = ET.fromstring(xml_string)
    '''
    # 保存为XML文件  
    with open(dw_code+'.xml', 'wb') as f:  
        f.write(ET.tostring(root, encoding='utf-8', xml_declaration=True))
    '''
    return xml_string


def alert(json_data, alarm, bdz_code, zxt, time_str,node_json,stationinfo_json,zxts):
    mysql_path = os.path.join(os.getcwd(), "data", "alert_config.json")
    with open(mysql_path, 'r', encoding='utf-8') as f:
        mid_json = json.load(f)
    if alarm:
        alarm_content = generate_xml(alarm, json_data['name'], bdz_code, zxt, time_str,node_json,stationinfo_json,zxts)
        # 服务器IP地址和端口号
        server_address = (mid_json['server_address'], mid_json['server_port'])

        # 创建一个 socket 对象
        udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

        # 绑定服务端的IP地址和端口号
        udp_socket.bind(server_address)
        client_address = (mid_json['client_address'], mid_json['client_port'])

        # 向客户端发送报文
        # udp_socket.sendto(bytes(alarm_content, encoding = "utf8"), client_address)
        # print('没有告警!没有告警!')
        print(alarm_content)
        udp_socket.sendto(alarm_content.encode('utf-8'), client_address)
    else:
        print(json_data['name'] + ' no alert!')
        # 服务器IP地址和端口号
        server_address = (mid_json['server_address'], mid_json['server_port'])

        # 创建一个 socket 对象
        udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

        # 绑定服务端的IP地址和端口号
        udp_socket.bind(server_address)
        client_address = (mid_json['client_address'], mid_json['client_port'])
        # 向客户端发送报文
        udp_socket.sendto(b'no alert!', client_address)

三、总结

完结,撒花!

相关推荐
白白白飘24 分钟前
pytorch 15.1 学习率调度基本概念与手动实现方法
人工智能·pytorch·学习
深度学习入门29 分钟前
机器学习,深度学习,神经网络,深度神经网络之间有何区别?
人工智能·python·深度学习·神经网络·机器学习·机器学习入门·深度学习算法
张彦峰ZYF1 小时前
走出 Demo,走向现实:DeepSeek-VL 的多模态工程路线图
人工智能
森哥的歌1 小时前
Python uv包管理器使用指南:从入门到精通
python·开发工具·uv·虚拟环境·包管理
2501_915909061 小时前
开发日常中的抓包工具经验谈:Charles 抓包工具与其它选项对比
websocket·网络协议·tcp/ip·http·网络安全·https·udp
qq_214782611 小时前
给你的matplotlib images添加scale Bar
python·数据分析·matplotlib
Johny_Zhao2 小时前
Vmware workstation安装部署微软SCCM服务系统
网络·人工智能·python·sql·网络安全·信息安全·微软·云计算·shell·系统运维·sccm
waterHBO2 小时前
python + flask 做一个图床
python
动感光博2 小时前
Unity(URP渲染管线)的后处理、动画制作、虚拟相机(Virtual Camera)
开发语言·人工智能·计算机视觉·unity·c#·游戏引擎
XiaoCCCcCCccCcccC2 小时前
Linux 的 UDP 网络编程 -- 回显服务器,翻译服务器
linux·网络·udp