python工具-udp-tcp-client-server-demo

python工具-udp-tcp-client-server-demo

  • server
    • tcp-server: python xxx.py -type tcp -ip “127.0.0.1” -port 1234
    • udp-server: python xxx.py -type udp -ip “127.0.0.1” -port 1234
  • client
    • python xxx.py -type udp -ip “127.0.0.1” -port 1111
    • python xxx.py -type tcp -ip “127.0.0.1” -port 1111

server-demo

import datetime
import socket
import select
import argparsedef udp_listen(local_ip, local_port):buffer_size  = 1024bytes_to_send         = str.encode("Hello UDP Client")# Create a datagram socketwith socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM) as sock:# Bind to address and ipsock.bind((local_ip, local_port))print(f"UDP server up and listening, {local_ip}:{local_port}")# Listen for incoming datagramswhile(True):recv_data = sock.recvfrom(buffer_size)message = recv_data[0]address = recv_data[1]print("==========================")print(datetime.datetime.now())    print(f"Message from Client:{message}")print(f"Client IP Address:{address}")# Sending a reply to clientsock.sendto(bytes_to_send, address)def tcp_listen(ip, port):# create socketwith socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)sock.bind((ip, port))print("[+] Listening on {0}:{1}".format(ip, port))sock.listen(5)  # permit to accesssock.setblocking(False)poll = select.poll()poll.register(sock, select.POLLIN)  # 注册 listen socket 到 pull 中fd_to_socket = {}try:while True:ready = poll.poll()if not ready:breakfor fd, _ in ready:if fd == sock.fileno():sub_sock, client_address = sock.accept()print("==========================")print("Accepted from", client_address)fd_to_socket[sub_sock.fileno()] = sub_sockpoll.register(sub_sock, select.POLLIN)  # 注册 accept socket 到 pull 中else:sub_sock = fd_to_socket[fd]raw_data = sub_sock.recv(1024)if not raw_data:print("Closed connection to", sub_sock.getpeername())poll.unregister(sub_sock)sub_sock.close()breaksub_sock.sendall(f"hello {client_address}".encode())print("Reveived {} from {}".format(raw_data.decode(), sub_sock.getpeername()))except KeyboardInterrupt:print("EXIT")except Exception as e:print(e)poll.unregister(sock)# python xxx.py -type udp -ip "127.0.0.1" -port 1234
# python xxx.py -type tcp -ip "127.0.0.1" -port 1234
if __name__ == "__main__":parser = argparse.ArgumentParser()parser.description='please enter correct para'parser.add_argument("-type", "--type", help="tcp or udp", type=str, default="udp")parser.add_argument("-ip", "--ip", help="listen ip", type=str, default="127.0.0.1")parser.add_argument("-port", "--port", help="listen port",  type=int, default=1111)try:args = parser.parse_args()if args.type == "udp":udp_listen(args.ip, args.port)elif args.type == "tcp":tcp_listen(args.ip, args.port)except Exception as e:print(e)

client-demo

import socket
import datetime
import argparsedef udp_send(server_ip, server_port, bytes_to_send):server_address   = (server_ip, server_port)recv_buf_size          = 1024# Create a UDP socket at client sideclient = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)client.settimeout(3)# Send to server using created UDP sockettry:print(datetime.datetime.now())print(f"send {bytes_to_send} to {server_ip}:{server_port}")# 可以通过 udp_client.bind 绑定本地发送的ip和portclient.sendto(bytes_to_send, server_address)print(f"local_addr: {client.getsockname()}")recv_data = client.recvfrom(recv_buf_size)print(f"message from server {recv_data[0]}")except Exception as e:print(f"connect {server_address} fail. reasion:{e}")def tcp_send(server_ip, server_port, bytes_to_send):server_address   = (server_ip, server_port)recv_buf_size          = 1024# Create a UDP socket at client sideclient = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)client.settimeout(3)# Send to server using created UDP sockettry:print(datetime.datetime.now())print(f"send {bytes_to_send} to {server_ip}:{server_port}")# 可以通过 udp_client.bind 绑定本地发送的ip和portclient.connect(server_address)client.sendall(bytes_to_send)print(f"local_addr: {client.getsockname()}")recv_data = client.recv(recv_buf_size)print(f"message from server {recv_data}")except Exception as e:print(f"connect {server_address} fail. reasion:{e}")# python xxx.py -type udp -ip "127.0.0.1" -port 1111
# python xxx.py -type tcp -ip "127.0.0.1" -port 1111
if __name__ == "__main__":parser = argparse.ArgumentParser()parser.description='please enter correct para'parser.add_argument("-type", "--type", help="tcp or udp", type=str, default="udp")parser.add_argument("-ip", "--ip", help="listen ip", type=str, default="127.0.0.1")parser.add_argument("-port", "--port", help="listen port",  type=int, default=1111)try:args = parser.parse_args()if args.type == "udp":udp_send(args.ip, args.port, "hello server".encode())elif args.type == "tcp":tcp_send(args.ip, args.port, "hello server".encode())except Exception as e:print(e)

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

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

相关文章

依赖Kafka的Go单元测试例解

Kafka[1]是Apache基金会开源的一个分布式事件流处理平台,是Java阵营(最初为Scala)中的一款杀手级应用,其提供的高可靠性、高吞吐量和低延迟的数据传输能力,让其到目前为止依旧是现代企业级应用系统以及云原生应用系统中使用的重要中间件。 在…

pytorch无法把共享内存写入文件

环境: 在容器中跑pytorch模型的训练 问题表现: ERROR: Unexpected bus error encountered in worker. This might be caused by insufficient shared memory (shm). Traceback (most recent call last): File "/root/anaconda3/lib/python3.8/m…

flutter getTemporaryDirectory()的使用

下面是上传音视频流的截图,先保存在缓存,然后请求接口,成功或者失败会删除文件。 可以在Device File Explorer查看, Android: 会返回 /data/data//cache 这个目录,是应用私有的缓存目录。 iOS: 会返回 Library/Caches 下的一个…

Java学习笔记-day06-响应式编程Reactor API大全(上)

Reactor 是一个基于响应式编程的库&#xff0c;主要用于构建异步和事件驱动的应用程序。Reactor 提供了丰富的 API&#xff0c;包括创建、转换、过滤、组合等操作符&#xff0c;用于处理异步数据流。以下是一些 Reactor 的主要 API 示例&#xff1a; pom依赖 <dependencyMan…

191. 位1的个数

编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 1 的个数&#xff08;也被称为汉明重量&#xff09;。 提示&#xff1a; 请注意&#xff0c;在某些语言&#xff08;如 Java&#xff09;中…

LeetCode 2645. 构造有效字符串的最少插入数

一、题目 1、题目描述 LeetCode 给你一个字符串 word &#xff0c;你可以向其中任何位置插入 "a"、"b" 或 "c" 任意次&#xff0c;返回使 word 有效 需要插入的最少字母数。如果2645. 构造有效字符串的最少插入数 2、接口描述 ​ class Solut…

SpringCloud微服务 【实用篇】| RabbitMQ快速入门、SpringAMQP

目录 一&#xff1a;初始RabbitMQ 1. 同步和异步通讯 1.1 同步调用 1.2 异步调用 2. MQ常见框架 二&#xff1a;RabbitMQ快速入门 1. RabbitMQ概述和安装 2. 常见消息队列模型 3. 快速入门案例 三&#xff1a;SpringAMQP 1. Basic Queue 简单队列模型 2. Work Queu…

Hive事务表转换为非事务表

环境&#xff1a;hive3.1.0 由于建表时默认会建为非事务表 CREATE TABLE bucket_text_table2(column1 string,column2 string,column3 int) CLUSTERED BY (column3) into 5 BUCKETS STORED AS TEXTFILE; 执行完成后&#xff0c;查看默认建表语句&#xff1a; ---------------…

PHP 微信小程序获取 手机号码

PHP代码 $param $_POST; $app_id ""; $app_secret "";$url_get https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appid . $app_id . &secret . $app_secret;$tmptoken json_decode(curl($url_get), true);$token $tm…

ORACLE RAC DG文件路径错乱解决办法

最近接手了一个客户的RAC-RAC dg环境的维护,登录上去之后发现dg延迟了8天,由于主库的空间非常紧张,归档日志早就删除了,所以准备使用rman基于scn点的备份恢复的方案恢复dg同步 在备份完成之后,使用新的控制文件进行数据恢复的时候报错datafile 43 not found: 检查了一下发现当…

SpringBoot中使用单例模式+ScheduledExecutorService实现异步多线程任务(若依源码学习)

场景 若依前后端分离版手把手教你本地搭建环境并运行项目&#xff1a; 若依前后端分离版手把手教你本地搭建环境并运行项目_本地运行若依前后端分离-CSDN博客 设计模式-单例模式-饿汉式单例模式、懒汉式单例模式、静态内部类在Java中的使用示例&#xff1a; 设计模式-单例模…

数据库 MySQL 索引的原理

在数据库中&#xff0c;索引是一种重要的数据结构&#xff0c;它用于加快数据的检索速度和提高查询性能。在 MySQL 中&#xff0c;索引的实现基于 B树结构。 索引的基本思想是通过维护一个有序的数据结构&#xff0c;来快速定位和访问表中的数据。B树是一种自平衡的二叉搜索树…

Python requirements.txt 详解

文章目录 1 概述1.1 作用1.2 注意 2 操作2.1 生成 requirements.txt2.2 安装 requirements.txt 3 示例3.1 新建 Django 项目3.2 找到 Scripts 目录&#xff0c;执行生成 requirements.txt 命令 1 概述 1.1 作用 作用&#xff1a;记录 当前项目下 所有 依赖包及其版本号&#…

Polars使用指南(一)

pandas是Python数据处理中非常经典的一个科学计算库&#xff0c;表形式的数据结构、丰富的API和灵活的编程语法使得pandas成为最常用的的数据分析工具。但是pandas也有一个最致命的缺陷&#xff0c;就是效率问题&#xff0c;尤其是不支持并行计算。pandas2在性能方面有了极大的…

不知道题目是啥

本题是学校的集训里的题&#xff0c;所有不知道题目名字是啥&#xff0c;直接看题目就好 解题思路&#xff1a;因为字符串只含有小写字母&#xff0c;所以可以创建两个数组分别来存s和t的每个字母出现次数&#xff0c;然后遍历数组&#xff0c;如果s字符串中的某个字母比t的小&…

输电线路分布式故障诊断装置的四大特点介绍-深圳鼎信

输电线路分布式故障诊断装置是一种利用行波测距、无线通信等技术手段实现电网故障定位的设备。这对于电网的故障处理和恢复具有重要意义&#xff0c;可以帮助运维人员提高故障处理的效率&#xff0c;缩短故障处理时间&#xff0c;减少停电时间&#xff0c;提高用户的供电可靠性…

premiere简约大气3D动画logo片头Pr模板Mogrt免费下载

Premiere简约大气3D动画logo片头pr模板mogrt下载&#xff0c;无需插件&#xff0c;高清分辨率&#xff0c;易于自定义&#xff0c;包括教程&#xff0c;不包括音频和图像。免费下载&#xff1a;https://prmuban.com/37065.html

Linux学习(1):目录结构、编辑器和用户管理

Linux学习&#xff08;1&#xff09;&#xff1a;目录结构、编辑器和用户管理 1 Linux目录结构2 vi和vim编辑器2.1 快捷键练习 3 用户管理3.1 添加用户3.2 删除用户即主目录3.3 切换用户 4 用户组 1 Linux目录结构 在linux世界里&#xff0c;一切皆为文件。 linux目录结构&a…

test fuzz-05-模糊测试 kelinci AFL-based fuzzing for Java

拓展阅读 开源 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) 开源 Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) test fuzz-01-模糊测试&#xff08;Fuzz Testing&#xff09; test fuzz-…

Gin CORS 跨域请求资源共享与中间件

Gin CORS 跨域请求资源共享与中间件 文章目录 Gin CORS 跨域请求资源共享与中间件一、同源策略1.1 什么是浏览器的同源策略&#xff1f;1.2 同源策略判依据1.3 跨域问题三种解决方案 二、CORS:跨域资源共享简介(后端技术)三 CORS基本流程1.CORS请求分类2.基本流程 四、CORS两种…