下大雨了写一个 小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 调试回射命令行相关推荐

  1. python terminal调试_python执行命令行调试工具pdb

    调试 pdb pdb是基于命令行的调试工具,非常类似gnu的gdb(调试c/c++). 命令简写命令作用 break b 设置断点(用法,b :在第数字行设置断点................... ...

  2. python3 调用 idm(Internet Download Manager)命令行下载

    idm官方命令参数介绍 您可以从命令行中使用下列参数启动 IDMidman /s 或 idman /d URL [/p 本地_路径] [/f 本地_文件_名] [/q] [/h] [/n] [/a]参 ...

  3. adb wifi 调试方法(命令行方式)

    插件方式不说了,因为命令行方式很简便 一.首先必须保证你的手机和电脑连接的是同一个 wifi,这点不用说吧 二.连接手机,并打开 电脑 TCP 模式 * 只需这一次用 USB 连接电脑 * 怎么打开 ...

  4. pycharm 调试模式下命令行参数的传递

    pycharm版本: 2019. 2018 debug代码的时候需要通过命令行传递参数的方法. 如上图,点击红圈1, 然后点击红圈2 弹出下图 在上图中需要注意红圈1 是需要传递的参数, 红圈2 是你 ...

  5. python3输入参数_python3 十一、命令行传参

    估计有很多小伙伴在linux系统上或win的doc中遇到没有UI页面的程序,只能通过命令行输入参数的形式去运行 那么python是怎么实现的呢? 熟悉python的小伙伴都知道python有个原生库 ...

  6. Python3中使用argparse模块解析命令行参数

    argparse是Python的一个标准模块,用于解析命令行参数,即解析sys.argv中定义的参数.实现在:https://github.com/python/cpython/blob/main/L ...

  7. 服务器编程入门(11)TCP并发回射服务器实现 - 单线程select实现

    问题聚焦: 当客户端阻塞于从标准输入接收数据时,将读取不到别的途径发过来的必要信息,如TCP发过来的FIN标志. 因此,进程需要内核一旦发现进程指定的一个或多个IO条件就绪(即输入已准备好被读取,或者 ...

  8. python3删除重复文件,可用命令行

    ​ win10自带照片软件导入iphone图片时抽风了,当时没多想,多试了几次,结果目录下多了一堆重复的照片.照片没有特别命名,导致手工查重非常辛苦.想着python3的环境装在电脑上没咋用过,就试着 ...

  9. vs中调试中的命令行参数

    http://blog.csdn.net/bizer_csdn/article/details/48859931 转载于:https://www.cnblogs.com/ArcherHuang/p/6 ...

最新文章

  1. Python【Python基础】
  2. ICDAR 2019国际竞赛召开在即,百度联合学界重奖破局者!
  3. VTK:可视化之ReverseAccess
  4. 电子元器件首饰!送给你喜欢的女孩!
  5. redisTemplate.opsForHash()
  6. maven项目部署到Repository(Nexus)
  7. teamspeak3服务器搭建_教你快速便捷的搭建Teamspeak 3 服务器和基友开黑必备!
  8. 23 个问题 TCP 疑难杂症全解析
  9. linux xshell 如何使用教程,Xshell入门教程
  10. php如何让图片自适应屏幕,css如何让图片自适应屏幕大小
  11. es6阮一峰-import、export学习
  12. matlab使用xlsread读取excel时报错/错误使用xlsread/matlab读取数据莫名其妙的错误
  13. Q# 微软量子计算编程语言
  14. 商洛师范学院计算机老师,我校在首届全国师范生微课大赛中获佳绩
  15. one 主格 复数 宾格_主格和宾格的区别
  16. 老朋友,愿你在天堂一切安好
  17. 2016年书单和电影
  18. 【2020年11月】研读和改进淘宝自动下单程序
  19. 深度剖析使用ROS系统开发机器人的好处
  20. vector之resize剖析-曾经的我以为自己真的学会了vector

热门文章

  1. mysql主从复制,半同步,主主复制架构的实现
  2. COMMIT WORK AND WAIT 是在WAIT什么
  3. LVS集群类型之TUN 隧道
  4. 《ASP.NET MVC 4框架揭秘》试读章节
  5. Trunc(dtpPurDate.DateTime)可以将时间取到天。
  6. 读大话数据结构之二--------算法(上)
  7. dev c++自动排版_再也不头疼文字排版了
  8. linux从i2c读取变量,I2C子系统之__I2C_first_dynamic_bus_num变量的相关分析
  9. python比赛2020_2020蓝桥杯python组备战方法
  10. linux记录用户命令的日志是,用日志记录Linux用户执行的每一条命令