python3 UDP TCP 调试回射命令行
下大雨了写一个 小demo,方便测试程序
#!/usr/bin/python3import socket, argparse
import time
from datetime import datetimeMAX_BYTES=65535class net_com:"""通用最简传输协议使用"""def __init__(self, proto: str, addr: tuple, opt: str):""":param proto: 选择使用的传输层的协议类型,:param addr: 传输层协议必须要有的IP地址和端口号:param opt: 选择使用的模式"""try:self.__proto = protoself.__addr = addrself.__opt = optexcept TypeError as reason:print("init common net error: {}".format(reason))def transport_init(self) -> socket:try:if self.__proto == "UDP":udp_fd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)return udp_fdelif self.__proto == "TCP":tcp_fd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)return tcp_fdexcept OSError as error:print("transport init error:{}".format(error))def print_recv(self, msg: tuple):""":param msg: 普通调试使用的打印方法:return:"""if self.__proto == "UDP":print("time:{} udp connect->{} {}:\n{}".format(datetime, msg[0][0], msg[0][1], msg[1]))elif self.__proto == "TCP":print("time:{} tcp connect->{} {}:\n{}".format(datatime, msg[0][0], msg[0][1], msg[1]))def __sfunc(self, func=print_recv):try:if self.__proto == "UDP":udp_fd = self.transport_init()udp_fd.bind(self.__addr)while True:listen_udp_recv = udp_fd.recvfrom(4096)func(listen_udp_recv)if self.__proto == "TCP":tcp_fd = self.transport_init()tcp_fd.bind(self.__addr)tcp_fd.listen(5)tcp_accept = tcp_fd.accept()print("tcp connect->{}:\n".format(tcp_accept))while True:time.sleep(3)msg = tcp_accept[0].recv(4096)print(msg)except OSError as error:print("server func error:{}".format(error))def send_example(self, fd: socket, msg="hello world"):if self.__proto == "UDP":fd.sendto(msg.encode("ascii"), self.__addr)elif self.__proto == "TCP":fd.send(msg.encode("ascii"))def __cfunc(self, func=send_example):try:if self.__proto == "UDP":udp_fd = self.transport_init()while True:time.sleep(3)func(fd=udp_fd)if self.__proto == "TCP":tcp_fd = self.transport_init()tcp_con_fd = tcp_fd.connect(self.__addr) #没有做任何的发送while True:time.sleep(3)func(fd=tcp_con_fd)except OSError as error:print("client func is error:{}".format(error))def transport(self):try:if self.__opt == "server":self.__sfunc()elif self.__opt == "client":self.__cfunc()except OSError as error:print("transport error:{}".format(error))if __name__ == "__main__":parser = argparse.ArgumentParser(description="Send and Recv locally")parser.add_argument('-t', type=str, default="UDP", help='trans type')parser.add_argument('-i', type=str, default="127.0.0.1", help="trans addr default 127.0.0.1")parser.add_argument('-p', type=int, default=8000, help="trans port default 8000")parser.add_argument('-m', type=str, default="server", help="trans mode default server")args = parser.parse_args()use = net_com(args.t, (args.i, args.p), args.m)use.transport()```
python3 UDP TCP 调试回射命令行相关推荐
- python terminal调试_python执行命令行调试工具pdb
调试 pdb pdb是基于命令行的调试工具,非常类似gnu的gdb(调试c/c++). 命令简写命令作用 break b 设置断点(用法,b :在第数字行设置断点................... ...
- python3 调用 idm(Internet Download Manager)命令行下载
idm官方命令参数介绍 您可以从命令行中使用下列参数启动 IDMidman /s 或 idman /d URL [/p 本地_路径] [/f 本地_文件_名] [/q] [/h] [/n] [/a]参 ...
- adb wifi 调试方法(命令行方式)
插件方式不说了,因为命令行方式很简便 一.首先必须保证你的手机和电脑连接的是同一个 wifi,这点不用说吧 二.连接手机,并打开 电脑 TCP 模式 * 只需这一次用 USB 连接电脑 * 怎么打开 ...
- pycharm 调试模式下命令行参数的传递
pycharm版本: 2019. 2018 debug代码的时候需要通过命令行传递参数的方法. 如上图,点击红圈1, 然后点击红圈2 弹出下图 在上图中需要注意红圈1 是需要传递的参数, 红圈2 是你 ...
- python3输入参数_python3 十一、命令行传参
估计有很多小伙伴在linux系统上或win的doc中遇到没有UI页面的程序,只能通过命令行输入参数的形式去运行 那么python是怎么实现的呢? 熟悉python的小伙伴都知道python有个原生库 ...
- Python3中使用argparse模块解析命令行参数
argparse是Python的一个标准模块,用于解析命令行参数,即解析sys.argv中定义的参数.实现在:https://github.com/python/cpython/blob/main/L ...
- 服务器编程入门(11)TCP并发回射服务器实现 - 单线程select实现
问题聚焦: 当客户端阻塞于从标准输入接收数据时,将读取不到别的途径发过来的必要信息,如TCP发过来的FIN标志. 因此,进程需要内核一旦发现进程指定的一个或多个IO条件就绪(即输入已准备好被读取,或者 ...
- python3删除重复文件,可用命令行
win10自带照片软件导入iphone图片时抽风了,当时没多想,多试了几次,结果目录下多了一堆重复的照片.照片没有特别命名,导致手工查重非常辛苦.想着python3的环境装在电脑上没咋用过,就试着 ...
- vs中调试中的命令行参数
http://blog.csdn.net/bizer_csdn/article/details/48859931 转载于:https://www.cnblogs.com/ArcherHuang/p/6 ...
最新文章
- Python【Python基础】
- ICDAR 2019国际竞赛召开在即,百度联合学界重奖破局者!
- VTK:可视化之ReverseAccess
- 电子元器件首饰!送给你喜欢的女孩!
- redisTemplate.opsForHash()
- maven项目部署到Repository(Nexus)
- teamspeak3服务器搭建_教你快速便捷的搭建Teamspeak 3 服务器和基友开黑必备!
- 23 个问题 TCP 疑难杂症全解析
- linux xshell 如何使用教程,Xshell入门教程
- php如何让图片自适应屏幕,css如何让图片自适应屏幕大小
- es6阮一峰-import、export学习
- matlab使用xlsread读取excel时报错/错误使用xlsread/matlab读取数据莫名其妙的错误
- Q# 微软量子计算编程语言
- 商洛师范学院计算机老师,我校在首届全国师范生微课大赛中获佳绩
- one 主格 复数 宾格_主格和宾格的区别
- 老朋友,愿你在天堂一切安好
- 2016年书单和电影
- 【2020年11月】研读和改进淘宝自动下单程序
- 深度剖析使用ROS系统开发机器人的好处
- vector之resize剖析-曾经的我以为自己真的学会了vector
热门文章
- mysql主从复制,半同步,主主复制架构的实现
- COMMIT WORK AND WAIT 是在WAIT什么
- LVS集群类型之TUN 隧道
- 《ASP.NET MVC 4框架揭秘》试读章节
- Trunc(dtpPurDate.DateTime)可以将时间取到天。
- 读大话数据结构之二--------算法(上)
- dev c++自动排版_再也不头疼文字排版了
- linux从i2c读取变量,I2C子系统之__I2C_first_dynamic_bus_num变量的相关分析
- python比赛2020_2020蓝桥杯python组备战方法
- linux记录用户命令的日志是,用日志记录Linux用户执行的每一条命令