Python套接字综合应用(UDP篇)

news2024/11/25 8:16:48

Python套接字综合应用(UDP篇)

1、 主要功能

  • UDP客户端实现
  • UDP服务端实现
  • 输出字体颜色控制
  • 响应捕获键盘Ctrl+C信号
  • 套接字异常捕获及处理
  • 通信报文16进制格式化输出

2、 Python UDP套接字应用

Windows程序在WinServer2022上验证运行,Linux程序在银河麒麟V10上验证运行。

通过《网络调试助手》进行调试验证,工具运行界面如下:
在这里插入图片描述

①、 Linux服务端

server.py

# -*- coding: gbk -*-

import socket
import datetime

#服务端参数设置
listen_addr = "192.168.58.145"
listen_port = 1281

#输出字体颜色控制
TEXT_COLOR_WHITE   = '\033[97m'
TEXT_COLOR_MAGENTA = '\033[95m'
TEXT_COLOR_BLUE    = '\033[94m'
TEXT_COLOR_YELLOW  = '\033[93m'
TEXT_COLOR_GREEN   = '\033[92m'
TEXT_COLOR_RED     = '\033[91m' 
TXET_COLOR_DEFAULT = '\033[0m'

#输出字体大小控制
TEXT_FONT_WEIGHT_DEFAULT  = '\033[0m'
TEXT_FONT_WEIGHT_BOLD     = '\033[1m\033[5m'
TEXT_FONT_WEIGHT_THIN     = '\033[2m\033[3m'
    
    
#1. 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#2. 绑定地址
sock.bind((listen_addr, listen_port))
#3. 接收数据
while True:
    rx_msg, peer_endpoint = sock.recvfrom(2048) 
    print('\n')
  
    # 获取当前时间
    now = datetime.datetime.now()
    str_date = now.strftime('%Y-%m-%d %H:%M:%S')
    str_ms = f"{now.strftime('%f')[:3]}".zfill(3)
    str_now = f"[{str_date}.{str_ms}]"
    
    #打印客户地址
    str_peer = "[{}]".format(peer_endpoint)
    str_rx = "[RX]"
    
    #打印头部信息
    print(f"%s" % str_rx + str_now + str_peer)
    
    #接收内容,格式化16进制
    line = ['%02X' % i for i in rx_msg]
    str_rx_msg = " ".join(line)
    print(f"{TEXT_COLOR_RED}%s{TXET_COLOR_DEFAULT}" % str_rx_msg)
        
    
    
    #发送信息给对方
    tx_msg = rx_msg
    sock.sendto(tx_msg,peer_endpoint)
    
    str_tx = "[TX]"
    now = datetime.datetime.now()
    str_date = now.strftime('%Y-%m-%d %H:%M:%S')
    str_ms = f"{now.strftime('%f')[:3]}".zfill(3)
    str_now = f"[{str_date}.{str_ms}]"
    print(f"%s" % str_tx + str_now + str_peer)
    
    #发送内容格式化
    line = ['%02X' % i for i in tx_msg]
    str_tx_msg = " ".join(line)
    print(f"{TEXT_COLOR_BLUE}%s{TXET_COLOR_DEFAULT}" % str_tx_msg)

sock.close()

运行效果
在这里插入图片描述

②、 Linux客户端

client.py

# -*- coding: gbk -*-

import socket
import datetime
import time


#本地网络参数设置
local_bind_addr = "192.168.58.145"
local_bind_port = 1281

#对方网络参数设置
remote_ep_addr = "192.168.58.1"
remote_ep_port = 50001

#交互模式
#[0]: 固定次数、固定间隔发送,用户只输入一次
#[1]: 每次要求用户输入,用户输入后才发送(默认方式)
tx_mode = 0

#只有tx_mode为[0]时生效
tx_count = 10
tx_interval_second = 2


#输出字体颜色控制
TEXT_COLOR_WHITE   = '\033[97m'
TEXT_COLOR_MAGENTA = '\033[95m'
TEXT_COLOR_BLUE    = '\033[94m'
TEXT_COLOR_YELLOW  = '\033[93m'
TEXT_COLOR_GREEN   = '\033[92m'
TEXT_COLOR_RED     = '\033[91m' 
TXET_COLOR_DEFAULT = '\033[0m'


#1. 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#2. 绑定本地地址
sock.bind((local_bind_addr, local_bind_port))
#设置接收超时时间(单位为秒)
timeout_seconds = 2
sock.settimeout(timeout_seconds)

#每次要求用户输入,用户输入后才发送(默认方式)
if tx_mode == 1 :
	while True:
		#3. 接收用户输入
		input_stream = input("请输入16进制发送报文数据,以空格分隔:")
		#4. 发送数据
		sock.sendto(bytearray.fromhex(input_stream),(remote_ep_addr,remote_ep_port))

		str_tx = "[TX]"
		now = datetime.datetime.now()
		str_date = now.strftime('%Y-%m-%d %H:%M:%S')
		str_ms = f"{now.strftime('%f')[:3]}".zfill(3)
		str_now = f"[{str_date}.{str_ms}]"
		str_remote_addr = "[{}]".format((remote_ep_addr,remote_ep_port))
		print(f"%s" % str_tx + str_now + str_remote_addr)

        #发送内容格式化
		print(f"{TEXT_COLOR_BLUE}%s{TXET_COLOR_DEFAULT}" % input_stream.upper())

		#5.接收数据
		try:
			rx_msg, peer_endpoint = sock.recvfrom(2048) 
			print('\n')
  
			# 获取当前时间
			now = datetime.datetime.now()
			str_date = now.strftime('%Y-%m-%d %H:%M:%S')
			str_ms = f"{now.strftime('%f')[:3]}".zfill(3)
			str_now = f"[{str_date}.{str_ms}]"
    
			#打印对端地址
			str_peer = "[{}]".format(peer_endpoint)
			str_rx = "[RX]"
    
			#打印头部信息
			print(f"%s" % str_rx + str_now + str_peer)
    
			#接收内容,格式化16进制
			line = ['%02X' % i for i in rx_msg]
			str_rx_msg = " ".join(line)
			print(f"{TEXT_COLOR_RED}%s{TXET_COLOR_DEFAULT}" % str_rx_msg.upper())
		except socket.timeout:
			#超时,继续
			continue

#固定次数、固定间隔发送,用户只输入一次
elif tx_mode == 0 :
	#3. 接收用户输入
	input_stream = input("请输入16进制发送报文数据,以空格分隔:")
	while tx_count > 0:
		#4. 发送数据
		sock.sendto(bytearray.fromhex(input_stream),(remote_ep_addr,remote_ep_port))

		str_tx = "[TX]"
		now = datetime.datetime.now()
		str_date = now.strftime('%Y-%m-%d %H:%M:%S')
		str_ms = f"{now.strftime('%f')[:3]}".zfill(3)
		str_now = f"[{str_date}.{str_ms}]"
		str_remote_addr = "[{}]".format((remote_ep_addr,remote_ep_port))
		print(f"%s" % str_tx + str_now + str_remote_addr)

        #发送内容格式化
		print(f"{TEXT_COLOR_BLUE}%s{TXET_COLOR_DEFAULT}" % input_stream.upper())

		#5.接收数据
		try:
			rx_msg, peer_endpoint = sock.recvfrom(2048) 
			print('\n')
  
			# 获取当前时间
			now = datetime.datetime.now()
			str_date = now.strftime('%Y-%m-%d %H:%M:%S')
			str_ms = f"{now.strftime('%f')[:3]}".zfill(3)
			str_now = f"[{str_date}.{str_ms}]"
    
			#打印对端地址
			str_peer = "[{}]".format(peer_endpoint)
			str_rx = "[RX]"
    
			#打印头部信息
			print(f"%s" % str_rx + str_now + str_peer)
    
			#接收内容,格式化16进制
			line = ['%02X' % i for i in rx_msg]
			str_rx_msg = " ".join(line)
			print(f"{TEXT_COLOR_RED}%s{TXET_COLOR_DEFAULT}" % str_rx_msg.upper())
		except socket.timeout:
			#接收超时
			continue
		except Exception as e:
			print(f"[处理异常]: {e}")
			print(f"{TEXT_COLOR_RED}terminating...{TXET_COLOR_DEFAULT}")
			sock.close()
			sys.exit(0)
    
		tx_count -= 1
		time.sleep(tx_interval_second)
            
sock.close()

运行效果
在这里插入图片描述

③、 Windows服务端

server.py

# -*- coding: gbk -*-

import socket
import datetime
import sys


#服务端参数设置
listen_addr = "192.168.58.151"
listen_port = 1281


#输出字体颜色控制
TEXT_COLOR_WHITE   = '\033[1;30m'
TEXT_COLOR_GRAY    = '\033[1;37m'
TEXT_COLOR_MAGENTA = '\033[1;35m'
TEXT_COLOR_BLUE    = '\033[1;34m'
TEXT_COLOR_YELLOW  = '\033[1;33m'
TEXT_COLOR_GREEN   = '\033[1;32m'
TEXT_COLOR_RED     = '\033[1;31m' 
TXET_COLOR_DEFAULT = '\033[0m'

#输出字体大小控制
TEXT_FONT_WEIGHT_DEFAULT  = '\033[0m'
TEXT_FONT_WEIGHT_BOLD     = '\033[1m\033[5m'
TEXT_FONT_WEIGHT_THIN     = '\033[2m\033[3m'

# "\033"是转义序列的开始,后面跟着一个或多个字符来指定具体的样式。
# [0m表示默认样式,[1m表示加粗,[2m表示常规,[5m表示放大,[3m表示缩小。


#仅限Windows系统
#print颜色控制失败时调用如下语句
import os
if os.name == "nt":
    os.system("")
	

#捕获键盘Ctrl+C信号
import signal
def signal_handler(signal,code):
	print(f"{TEXT_COLOR_RED}terminating...{TXET_COLOR_DEFAULT}")
	sys.exit(0)
	 
signal.signal(signal.SIGINT,signal_handler)
signal.signal(signal.SIGTERM,signal_handler)


#16进制格式化输出
def print_hex(bytes):
    line = ['%02X' % i for i in bytes]	
    print(" ".join(line))
    
	
    
#1. 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#2. 绑定地址
sock.bind((listen_addr, listen_port))
#3. 设置接收超时时间(单位为秒)
timeout_seconds = 2
sock.settimeout(timeout_seconds)
#4. 接收数据
while True:
	try:
		rx_msg, peer_endpoint = sock.recvfrom(2048) 
		print('\n')
	  
		# 获取当前时间
		now = datetime.datetime.now()
		str_date = now.strftime('%Y-%m-%d %H:%M:%S')
		str_ms = f"{now.strftime('%f')[:3]}".zfill(3)
		str_now = f"[{str_date}.{str_ms}]"
		
		#打印客户地址
		str_peer = "[{}]".format(peer_endpoint)
		str_rx = "[RX]"
		
		#打印头部信息
		print(f"{TEXT_COLOR_GRAY}%s{TXET_COLOR_DEFAULT}" % str_rx + str_now + str_peer)
		
		#接收内容,格式化16进制
		line = ['%02X' % i for i in rx_msg]
		str_rx_msg = " ".join(line)
		print(f"{TEXT_COLOR_BLUE}%s{TXET_COLOR_DEFAULT}" % str_rx_msg)
			
		
		
		#发送信息给对方
		tx_msg = rx_msg
		sock.sendto(tx_msg,peer_endpoint)
		
		str_tx = "[TX]"
		now = datetime.datetime.now()
		str_date = now.strftime('%Y-%m-%d %H:%M:%S')
		str_ms = f"{now.strftime('%f')[:3]}".zfill(3)
		str_now = f"[{str_date}.{str_ms}]"
		print(f"{TEXT_COLOR_GRAY}%s{TXET_COLOR_DEFAULT}" % str_tx + str_now + str_peer)
		
		#发送内容格式化
		line = ['%02X' % i for i in tx_msg]
		str_tx_msg = " ".join(line)
		print(f"{TEXT_COLOR_GREEN}%s{TXET_COLOR_DEFAULT}" % str_tx_msg)
		
	except socket.timeout:
		#超时,继续
		continue
sock.close()

运行效果
在这里插入图片描述

④、 Windows客户端

client.py

# -*- coding: gbk -*-

import socket
import datetime
import time


#本地网络参数设置
local_bind_addr = "192.168.58.131"
local_bind_port = 1281

#对方网络参数设置
remote_ep_addr = "192.168.58.1"
remote_ep_port = 50001

#交互模式
#[0]: 固定次数、固定间隔发送,用户只输入一次
#[1]: 每次要求用户输入,用户输入后才发送(默认方式)
tx_mode = 0

#只有tx_mode为[0]时生效
tx_count = 10
tx_interval_second = 2


#仅限Windows系统
#print颜色控制失败时调用如下语句
import os
if os.name == "nt":
    os.system("")
	

#捕获键盘Ctrl+C信号
import signal
def signal_handler(signal,code):
	print(f"{TEXT_COLOR_RED}terminating...{TXET_COLOR_DEFAULT}")
	sys.exit(0)
	 
signal.signal(signal.SIGINT,signal_handler)
signal.signal(signal.SIGTERM,signal_handler)


#输出字体颜色控制
TEXT_COLOR_WHITE   = '\033[1;30m'
TEXT_COLOR_GRAY    = '\033[1;37m'
TEXT_COLOR_MAGENTA = '\033[1;35m'
TEXT_COLOR_BLUE    = '\033[1;34m'
TEXT_COLOR_YELLOW  = '\033[1;33m'
TEXT_COLOR_GREEN   = '\033[1;32m'
TEXT_COLOR_RED     = '\033[1;31m' 
TXET_COLOR_DEFAULT = '\033[0m'


#1. 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#2. 绑定本地地址
sock.bind((local_bind_addr, local_bind_port))
#设置接收超时时间(单位为秒)
timeout_seconds = 2
sock.settimeout(timeout_seconds)

#每次要求用户输入,用户输入后才发送(默认方式)
if tx_mode == 1 :
	while True:
		#3. 接收用户输入
		input_stream = input("请输入16进制发送报文数据,以空格分隔:")
		#4. 发送数据
		sock.sendto(bytearray.fromhex(input_stream),(remote_ep_addr,remote_ep_port))

		str_tx = "[TX]"
		now = datetime.datetime.now()
		str_date = now.strftime('%Y-%m-%d %H:%M:%S')
		str_ms = f"{now.strftime('%f')[:3]}".zfill(3)
		str_now = f"[{str_date}.{str_ms}]"
		str_remote_addr = "[{}]".format((remote_ep_addr,remote_ep_port))
		print(f"%s" % str_tx + str_now + str_remote_addr)

        #发送内容格式化
		print(f"{TEXT_COLOR_BLUE}%s{TXET_COLOR_DEFAULT}" % input_stream.upper())

		#5.接收数据
		try:
			rx_msg, peer_endpoint = sock.recvfrom(2048) 
			print('\n')
  
			# 获取当前时间
			now = datetime.datetime.now()
			str_date = now.strftime('%Y-%m-%d %H:%M:%S')
			str_ms = f"{now.strftime('%f')[:3]}".zfill(3)
			str_now = f"[{str_date}.{str_ms}]"
    
			#打印对端地址
			str_peer = "[{}]".format(peer_endpoint)
			str_rx = "[RX]"
    
			#打印头部信息
			print(f"%s" % str_rx + str_now + str_peer)
    
			#接收内容,格式化16进制
			line = ['%02X' % i for i in rx_msg]
			str_rx_msg = " ".join(line)
			print(f"{TEXT_COLOR_RED}%s{TXET_COLOR_DEFAULT}" % str_rx_msg.upper())
		except socket.timeout:
			#超时,继续
			continue

#固定次数、固定间隔发送,用户只输入一次
elif tx_mode == 0 :
	#3. 接收用户输入
	input_stream = input("请输入16进制发送报文数据,以空格分隔:")
	while tx_count > 0:
		#4. 发送数据
		sock.sendto(bytearray.fromhex(input_stream),(remote_ep_addr,remote_ep_port))

		str_tx = "[TX]"
		now = datetime.datetime.now()
		str_date = now.strftime('%Y-%m-%d %H:%M:%S')
		str_ms = f"{now.strftime('%f')[:3]}".zfill(3)
		str_now = f"[{str_date}.{str_ms}]"
		str_remote_addr = "[{}]".format((remote_ep_addr,remote_ep_port))
		print(f"%s" % str_tx + str_now + str_remote_addr)

        #发送内容格式化
		print(f"{TEXT_COLOR_BLUE}%s{TXET_COLOR_DEFAULT}" % input_stream.upper())

		#5.接收数据
		try:
			rx_msg, peer_endpoint = sock.recvfrom(2048) 
			print('\n')
  
			# 获取当前时间
			now = datetime.datetime.now()
			str_date = now.strftime('%Y-%m-%d %H:%M:%S')
			str_ms = f"{now.strftime('%f')[:3]}".zfill(3)
			str_now = f"[{str_date}.{str_ms}]"
    
			#打印对端地址
			str_peer = "[{}]".format(peer_endpoint)
			str_rx = "[RX]"
    
			#打印头部信息
			print(f"%s" % str_rx + str_now + str_peer)
    
			#接收内容,格式化16进制
			line = ['%02X' % i for i in rx_msg]
			str_rx_msg = " ".join(line)
			print(f"{TEXT_COLOR_RED}%s{TXET_COLOR_DEFAULT}" % str_rx_msg.upper())
		except socket.timeout:
			#接收超时
			continue
		except Exception as e:
			print(f"[处理异常]: {e}")
			print(f"{TEXT_COLOR_RED}terminating...{TXET_COLOR_DEFAULT}")
			sock.close()
			sys.exit(0)
    
		tx_count -= 1
		time.sleep(tx_interval_second)
            
sock.close()

运行效果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2035952.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Java]面向对象-抽象类/方法接口适配器设计模式

抽象类 一个类中如果存在抽象方法,那么该类就必须申明为抽象类 定义格式: 如果一个类包含抽象方法,那么该类必须是抽象类。注意:抽象类不一定有抽象方法,但是有抽象方法的类必须定义成抽象类。 abstract class 类名…

haproxy七层代理详解之-完整安装部署流程及负载均衡实现-及热更新方法

一.负载均衡 1.1负载均衡时什么 负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了衡将特定的业务(web服务、公司…

嵌入式生物打印是什么?有啥优势?

大家好,今天我们来了解一下这篇《Embedded 3D bioprinting–An emerging strategy to fabricate biomimetic & large vascularized tissue constructs》发表于《Bioactive Materials》的一篇综述,在组织工程和再生医学领域,传统方法存在一…

【JUC】04-synchronized关键字

1. 悲观锁与乐观锁 悲观锁:认为自己在使用数据的时候一定会有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。synchroized和Lock的实现类都是乐观锁:认为自己在使用数据时不会有别的线程修改数据…

激光尘埃粒子计数器在洁净室监测中的关键应用(原理、类型、选型)

激光尘埃粒子计数器的应用 激光尘埃粒子计数器广泛应用于多个领域,包括但不限于: 权威机构:如血液中心、防疫站、疾控中心、质量监督所等。 生产企业和科研部门:如电子行业、制药车间、半导体、光学或精密机械加工、塑胶、喷漆…

构建流水线生产管理创新的RFID智能管理系统应用方案

在当今竞争激烈的制造业环境中,流水线生产的高效、精准和智能化管理已成为企业获取竞争优势的关键。然而,传统的流水线生产管理方式在应对日益复杂的生产需求和多变的市场环境时,逐渐暴露出诸多难点和痛点。 一、流水线生产管理的难点与痛点…

OCR调研

OCR调研 一、介绍 OCR(Optical Character Recognition,光学字符识别)是一种将图像中的文字转换为计算机可处理格式的技术。OCR技术经历了从传统OCR到基于深度学习的OCR的转变。深度学习OCR技术通过模拟人脑神经元结构处理文本和图像数据&am…

打造高效存储与访问体验:NFS共享携手Nginx负载均衡,赋能企业级数据流通与性能优化

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团团-CSDN博客 目录: 前言&#…

AIGC实践|AI助力一张照片生成百变写真

前言: 在之前的文章中,我们已经领略了 AI 在动态有声绘本、小游戏开发、视频短片制作以及包装设计等领域的神奇应用,在本篇文章中,我将尝试利用AI辅助,使用一张照片生成个性化写真集。充分满足工作艺术照、各地郊游打…

关于自己部署AI大模型踩的坑(二)—— GPU篇

最近一直在研究如何打算属于我自己的J.A.R.V.I.S.(钢铁侠中的机器人管家)。 上一篇写了我最近在部署自己的大模型,使用llama3.1, 和通义千问2。虽然最终结果也是成功了,过程却十分地坎坷。 所以这一篇文章一是总结其中…

linux学习--第一天

--linux基础命令 -本地安装 1. sudo dpkg -i 软件包 :安装单个软件包 2. sudo dpkg -i * .deb :安装多个软件包 3. sudo dpkg -L 软件包:列出软件在系统中文件路径 4. sudo dpkg -s 软件包:列出软件包的安装状态 5. …

页面布局-1

1.定位 CSS 属性名功能属性值position设置定位 static:不定位,默认值。 relative:相对定位。 absolute:绝对定位。 fixed:固定定位 left与参照点左侧距离长度right与参照点右侧距离长度top与参照点上侧距离长度bottom…

【数据结构初阶】队列

hello! 目录 一、概念与结构 二、队列的实现 Queue.h Queue.c test.c 一、概念与结构 1、概念:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性。 入队列:进行插入操作…

音视频概要

YUV原理的讲解 YUV是一种常见的视频像素格式,经常用在视频编解码上面,YUV分别由Y分量和U、V分量(红色投影Cr)组成。Y分量指的是亮度分量,也就是我们经常说的灰阶值,相当于一副灰色的图像。而U分量和V分量表示的是色度分量&#x…

搭建高可用OpenStack(Queen版)集群(九)之部署nova计算节点

一、搭建高可用OpenStack(Queen版)集群之部署计算节点 一、部署nova 1、安装nova-compute 在全部计算节点安装nova-compute服务 yum install python-openstackclient openstack-utils openstack-selinux -y yum install openstack-nova-compute -y 若yu…

基于vue框架的《大学计算机》课程思政资源共享平台ac9s7(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:学生,教师,教研小组,章节分类,课程内容,资源类型,资源信息 开题报告内容 基于Vue框架的《大学计算机》课程思政资源共享平台 开题报告 一、引言 随着教育信息化的深入发展,高等教育领域对课程思政的重视程度日益提升。《大…

【kubernetes】pod控制器详解

一、pod控制器概述 1、Pod控制器作用 Pod控制器,是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行重启,当根据重启策略无效,则会重新新建pod的资源。 2、pod控制器…

Ethercat学习-SOEM主站源码解析(DC部分)

文章目录 SOEM DC模式源码简介示例用图ecx_porttimeecx_parentportecx_configdc如果从站不支持DC如果从站支持DC SOEM DC模式源码简介 示例用图 本文中都会围绕着这个图来讲,从站的port编号依次为0,3,1,2 在SOEM中,与…

C++11相关新特性(列表初始化、右值引用、可变参数模版)

目录 C11相关新特性 列表初始化 初始化简单变量 初始化容器 decltype关键字 C 11新增的容器 左值引用和右值引用 左值与右值 左值引用与右值引用 左值引用和右值引用的相互转化 右值引用的使用 拷贝构造函数与移动构造函数 赋值重载函数与移动赋值重载函数 元素插…

ZABBIX邮件监控发送信息

前言:本地邮箱,第三方邮箱,第三方邮箱加脚本 1、本地邮箱测试 #cd /home # ls laiyingx [rootzabbix ~]# vim /etc/postfix/main.cf /mydestination $myhostname, localhost.$mydomain, localhost,$mydomain [rootzabbix ~]# systemctl…