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)

三、总结

完结,撒花!

相关推荐
NGINX开源社区14 分钟前
使用 NGINX 作为 AI Proxy
大数据·人工智能·nginx
腾讯蓝鲸智云5 小时前
嘉为蓝鲸可观测系列产品入选Gartner《中国智能IT监控与日志分析工具市场指南》
运维·人工智能·信息可视化·自动化
2401_874732535 小时前
为你的Python脚本添加图形界面(GUI)
jvm·数据库·python
LaughingZhu6 小时前
Product Hunt 每日热榜 | 2026-03-25
人工智能·经验分享·深度学习·神经网络·产品运营
FreakStudio6 小时前
0 元学嵌入式 GUI!保姆级 LVGL+MicroPython 教程开更,从理论到实战全搞定
python·单片机·嵌入式·面向对象·电子diy
蟑螂恶霸6 小时前
Windows安装OpenCV 4.8
人工智能·windows·opencv
枫叶林FYL6 小时前
【自然语言处理 NLP】第二章 经典NLP算法与特征工程(Classical NLP Algorithms)
人工智能·深度学习·机器学习
非著名程序员6 小时前
阿里云重磅上线 Qoder 专家团模式,AI 编程进入组团作战时代
人工智能
AEIC学术交流中心7 小时前
【快速EI检索 | IEEE出版】2026年人工智能、智能系统与信息安全国际学术会议(AISIS 2026)
人工智能
火山引擎开发者社区7 小时前
李诞、何同学、小Lin说同台直播,解锁养虾新玩法!
人工智能