使用python的socketserver使服务器支持多客户端访问

1 背景

近期在做机器人集群的分布式控制,涉及到了机器人之间的交流工作,其中,每一台机器人都需要与多个机器人进行交流。

考虑使用python的socket来做,但简单测试了一下,socket模块不能方便的实现一个服务器与多客户端的通信,需要使用多线程等方法,程序编写的时间较长,也不是我的主要工作内容,因此寻找一个能够简单实现的方法。

在这个背景下,找到了socketserver,它是用于网络服务器的框架,其介绍参考(socketserver介绍)。

我在它的基础上简单地实现了多客户端访问,这里分享一下。

2 服务器端

# server
import socketserverclass MyTCPHandler(socketserver.BaseRequestHandler):def handle(self):# 接收客户端请求的数据self.data = self.request.recv(1024).strip()print("{} 发送了:{}".format(self.client_address[0], self.data))# 向客户端发送响应数据#self.request.sendall(self.data.upper())my_agent_status = "Agent #3, target = 2"self.request.sendall(my_agent_status.encode('utf-8'))if __name__ == "__main__":# 创建服务器,绑定 IP 地址和端口号#HOST, PORT = "localhost", 9999HOST_local = "127.0.0.1"HOST_agent3 = "192.168.3.29"PORT = 65432 # Port to listen on (non-privileged ports are > 1023)server = socketserver.TCPServer((HOST_local, PORT), MyTCPHandler)# 启动服务器server.serve_forever()

3 客户端

# client
import socketHOST = "127.0.0.1"
PORT = 65432 # Port to listen on (non-privileged ports are > 1023)with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:s.connect((HOST, PORT))#s.sendall(b"HEllo, world")s.sendall(b"Agent #1 is asking for current status...")data = s.recv(1024).decode('utf-8')print("Recieved")
print(data)with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:s.connect((HOST, PORT))#s.sendall(b"HEllo, world")s.sendall(b"Agent #1 is asking for current status...")data = s.recv(1024).decode('utf-8')print("Recieved")
print(data)

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

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

相关文章

C_9练习题答案

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) C语言程序中,要使用数学库函数(例sqrt、sin等),需要在程序最前面加上包含文件的预处理命令(C)。 A. #include &l…

java内部类的使用

什么是内部类:在一个类的内部定义的类称为内部类 为什么用内部类:完成某些功能只在某个具体的外部类中使用,其他地方不需要再使用,这是可以将此功能定义在一个内部类中,而不需要单独创建一个类。 用内部类的好处在内…

在WPF窗口中增加水印效果

** 原理: ** 以Canvas作为水印显示载体,在Canvas中创建若干个TextBlock控件用来显示水印文案,如下图所示 然后以每一个TextBlock的左上角为中心旋转-30,最终效果会是如图红线所示: 为了达到第一行旋转后刚好与窗口…

日常记录软件操作

webstorm下载集成码云步骤 1:file>>>settings>>plugins ,在marketplace,下载gitee; 2:重启编辑器 3:file>>>settings>>>version control >>> gitee ,添加对应用…

App防止恶意截屏功能的方法:iOS、Android和鸿蒙系统的实现方案

防止应用被截图是一个比较常见的需求,主要是出于安全考虑。下面将分别为iOS(苹果系统)、Android(安卓系统)及HarmonyOS(鸿蒙系统)提供防止截屏的方法和示例代码。 在企业内部使用的应用中&…

物联网架构之CDH

1、常规初始化操作 三个节点都需要执行 hostnamectl set-hostname cdhmaster yum -y install vim lrzsz net-tools cat >>/etc/hosts<<EOF 192.168.180.210 cdhmaster 192.168.180.200 cdhslave01 192.168.180.190 cdhslave02 EOF systemctl stop firewalld.s…

深入解析Freemarker模板引擎及其在Spring Boot中的高级整合

目录 引言1. Freemarker1.1.什么是Freemarker1.2 Freemarker模板组成部分1.3.优点 2. Spring Boot整合Freemarker2.1 配置2.2 数据类型 3. 案例总结 引言 Freemarker作为一款强大的模板引擎&#xff0c;与Spring Boot的整合能够极大地提升Web应用的开发效率和灵活性。本篇博客…

Java面试题(每天10题)-------连载(47)

目录 Mybatis篇 1、#{}和${}的区别 2、通常一个Xml映射文件&#xff0c;都会写一个Dao接口与之对应&#xff0c;那么这个Dao接口的工作原理是什么&#xff1f;Dao接口中的方法&#xff0c;参数不同时&#xff0c;方法能重载吗&#xff1f; 3、Mybatis是如何让进行分页的&am…

探索 Vim:一个强大的文本编辑器

引言&#xff1a; Vim&#xff08;Vi IMproved&#xff09;是一款备受推崇的文本编辑器&#xff0c;拥有强大的功能和高度可定制性&#xff0c;提供丰富的编辑和编程体验。本文将探讨 Vim 的基本概念、使用技巧以及为用户带来的独特优势。 简介和发展 1. Vim 的简介和历史 V…

axios全局封装取消请求,你可以创建一个 Axios 实例,并为该实例配置默认的 CancelToken

import axios from axios; // Axios 的 CancelToken const CancelToken axios.CancelToken; // 创建一个 Axios 实例 const instance axios.create(); // 用于存储所有的 cancel 函数 const pendingRequests new Set(); // 添加请求配置 instance.interceptors.…

发布jar包到maven中央仓库

1. 环境 在网上找的很多文章中写得都有很多问题&#xff0c;这里记录一下最近一次成功地发布jar包到maven中央仓库的过程。并附带上每一个步骤官方的指导链接。 系统&#xff1a;mac&#xff08;windows系统在下载辅助工具时不太一样&#xff0c;在配置上和mac系统没有区别&…

docker部署go gin框架 Linux环境

目录 文章目的是什么 环境介绍 Linux 环境下 docker 部署 go gin 详细步骤 部署 gin 文章目的是什么 假设我们学习了 go 语言&#xff0c;在 Linux 上安装了 go 相关的程序&#xff0c;也能直接运行&#xff0c;使用以下命令&#xff1a; go run main.go 假如代码是这样的…

算法中的最优化方法课程复习

算法中的最优化方法课程复习 单模函数、拟凸函数、凸函数证明证明一个线性函数与一个凸函数的和也是凸的 梯度线性规划标准形式以及如何标准化标准形式常见标准化方法线性化技巧 单纯形法二次规划无约束优化Nelder-Mead线搜索FR共轭梯度法例题 优化算法的选择、停止准则算法选择…

electron命令下载失败,手动安装教程

现象&#xff1a;pnpm i electron, 一直卡在提示错误node install.js 一 、下载需要的electron版本 地址 二、下载完毕&#xff0c;解压压缩包&#xff0c; 进入项目的node_modules/electron文件夹&#xff0c;创建dist文件夹&#xff0c;将下载的zip包里的文件复制到dist…

Docker笔记:docker compose部署项目, 常用命令与负载均衡

docker compose的作用 docker-compose是docker官方的一个开源项目可以实现对docker容器集群的快速编排docker-compose 通过一个配置文件来管理多个Docker容器在配置文件中&#xff0c;所有的容器通过 services来定义然后使用docker-compose脚本来启动&#xff0c;停止和重启容…

oracle 查看统计信息

统计信息在oracle中是非常重要的模块&#xff0c;就好似打仗时的侦察兵&#xff0c;提前了解敌情&#xff0c;来帮助CBO更好地生成执行计划。下面是一些常用地查看统计信息的语句&#xff0c;希望能帮助到大家。 表统计信息查看 select t.owner, t.table_name, t.num_rows, t…

考研真题c语言

【2016年山西大学考研真题】输入10个学生三门课的成绩&#xff0c;用函数实现&#xff1a;找出最高的分数所对应的学号和成绩。 1. 定义一个结构体 Student 来表示每个学生&#xff0c;包括学号和三门课的成绩。 c typedef struct { int studentID; int score1; i…

链路追踪详解(四):分布式链路追踪的事实标准 OpenTelemetry 概述

目录 OpenTelemetry 是什么&#xff1f; OpenTelemetry 的起源和目标 OpenTelemetry 主要特点和功能 OpenTelemetry 的核心组件 OpenTelemetry 的工作原理 OpenTelemetry 的特点 OpenTelemetry 的应用场景 小结 OpenTelemetry 是什么&#xff1f; OpenTelemetry 是一个…

DevEco Studio 鸿蒙(HarmonyOS)项目结构

DevEco Studio 鸿蒙&#xff08;HarmonyOS&#xff09;项目结构 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、项目结构 创建简单的Hello World移动应用项目结构如下图 由上到下说明各个文件夹的作用 .hvigor&#xff1a;存…

阅读笔记——《UTOPIA: Automatic Generation of Fuzz Driverusing Unit Tests》

【参考文献】Jeong B, Jang J, Yi H, et al. UTOPIA: automatic generation of fuzz driver using unit tests[C]//2023 IEEE Symposium on Security and Privacy (SP). IEEE, 2023: 2676-2692.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&#xff0c;请联系作者删除。…