ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UDP协议测试

2022-09-10 09:03:53  阅读:228  来源: 互联网

标签:info 协议 UDP socket text udp 测试 logger


UDP协议测试

简介

UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议,尽管UDP提供标头和有效负载的完整性验证(通过校验和),但它不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP 消息的状态。因此,UDP有时被称为不可靠的数据报协议。如果需要传输可靠性,则必须在用户应用程序中实现。
在Python中一般用socket库来创建udp协议传输。
在部分测试中,我们可能需要模拟udp发送数据或者接收数据。

代码示例

服务端

import socket
from common.common import logger_print
from UDP_TEST.read_config import *
from UDP_TEST.read_byte import *
import struct


logger = logger_print(logfile)


def udp_server_recv(port, byte_length):
    """
    udp协议接收字节流
    :param port: 端口,int类型
    :param byte_length: 字节长度限制大小,int类型
    :return:
    """
    # 获得本地ip地址
    recv_ip = socket.gethostbyname(socket.gethostname())
    logger.info("接收的ip地址为:%s,端口为:%s" % (recv_ip, port))
    # 建立服务端的套接字对象,第一个参数是ipv4协议,第二个参数是UDP协议
    udp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 绑定ip和端口
    udp_server_socket.bind((recv_ip, port))
    i = 0
    while True:
        try:
            data, addr = udp_server_socket.recvfrom(byte_length)
            logger.info(addr)
            logger.info(data)
            i += 1
            logger.info(i)
            d = chr(data[1])
            try:
                if d == "j":
                    text = read_j(data)
                    logger.info(text)
                    udp_server_socket.sendall('收到'.encode())
                elif d == "m":
                    text = read_m(data)
                    logger.info(text)
                elif d == "s":
                    text = read_s(data)
                    logger.info(text)
                elif d == "n":
                    text = read_n(data)
                    logger.info(text)
                elif d == "p":
                    text = read_fly_num(data)
                    logger.info(text)
                else:
                    logger.warning("未知类型")
            except Exception as e:
                logger.error(e)
        except Exception as e:
            logger.error(e)

客户端

import socket
from common.common import logger_print
from UDP_TEST.read_config import *
from UDP_TEST.read_byte import *
import struct


def udp_server_send(byte_stream, recv_ip, port):
    """
    udp协议发送字节流
    :param byte_stream: 字节流
    :param recv_ip: 目标地址
    :param port: 目标端口,int型
    :return:
    """
    # 建立服务端的套接字对象,第一个参数是ipv4协议,第二个参数是UDP协议
    udp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 接收方地址
    recv_addr = (recv_ip, port)
    logger.info(recv_addr)
    # 发送消息
    udp_server_socket.sendto(byte_stream, recv_addr)
    # 接收消息
    udp_server_socket.recvfrom(1024)
    logger.info("发送消息成功,%s" % byte_stream)
    # 关闭套接字对象
    udp_server_socket.close()

标签:info,协议,UDP,socket,text,udp,测试,logger
来源: https://www.cnblogs.com/caodingzheng/p/16675966.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有