【python】TCP socket服务器 Demo

目录

一、单线程服务器

二、多线程服务器

三、多线程服务器(发送和接收分离)


一、单线程服务器

说明:只能连接一个客户端

import socket,binascii# 创建一个 TCP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定套接字到指定的主机和端口
server_address = ('localhost', 6666)
server_socket.bind(server_address)# 开始监听连接
server_socket.listen(5)  # 最多同时监听 5 个连接请求print("等待客户端连接...")while True:# 等待客户端连接client_socket, client_address = server_socket.accept()print(f"接受来自 {client_address} 的连接")# 接收客户端发送的数据while True:data = client_socket.recv(1024)  # 最多接收 1024 字节的数据data_hex = binascii.hexlify(data).decode('utf-8')  # 将二进制数据转换为十六进制字符串print(data_hex)# 向客户端回复响应数据sendData = "1A2B3C"client_socket.send(bytes.fromhex(sendData))if not data:break  # 如果没有数据,退出循环# 关闭与客户端的连接client_socket.close()break# 关闭服务器套接字
server_socket.close()

客户端测试结果:

服务端测试结果:

二、多线程服务器

 说明:可以支持连接多个客户端

import socket,binascii,threadingdef thread_HandleClient(client_socket):  # 用于处理与客户端连接后的逻辑while True:# 接收客户端发送的数据data = client_socket.recv(1024)data_hex = binascii.hexlify(data).decode('utf-8')  # 将二进制数据转换为十六进制字符串print(f"接收到来自 {client_socket.getpeername()} 的数据:{data_hex}")if not data:break  # 如果没有数据,退出循环# 向客户端发送响应数据sendData = "1A2B3C"client_socket.send(bytes.fromhex(sendData))# client_socket.sendall(bytes.fromhex(sendData))# 关闭与客户端的连接client_socket.close()# 创建一个 TCP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定套接字到指定的主机和端口
server_address = ('localhost', 6666)
server_socket.bind(server_address)# 开始监听连接
server_socket.listen(5)  # 最多同时监听 5 个连接请求print("等待客户端连接...")while True:# 等待客户端连接client_socket, client_address = server_socket.accept()print(f"接受来自 {client_address} 的连接")# 创建一个新线程来处理客户端连接client_thread = threading.Thread(target=thread_HandleClient, args=(client_socket,))client_thread.start()

客户端测试结果: 

服务端测试结果:

三、多线程服务器(发送和接收分离)

说明: 可以支持连接多个客户端,并且能够做到和多个客户端发送、接收信息同时进行

import socket,threading,binascii,timedef receive_data(client_socket):while True:try:# 接收客户端发送的数据data = client_socket.recv(1024)data_hex = binascii.hexlify(data).decode('utf-8')  # 将二进制数据转换为十六进制字符串print(f"接收到来自 {client_socket.getpeername()} 的数据:{data_hex}")if not data:break  # 如果没有数据,退出循环except Exception as e:print(f"接收数据时出现错误:{e}")break# 关闭与客户端的连接client_socket.close()def send_data(client_socket):while True:try:sendData = "1A2A3A"  # 要发送的数据client_socket.sendall(bytes.fromhex(sendData))  # 向客户端发送数据time.sleep(1)  # 1s发1条except Exception as e:print(f"发送数据时出现错误:{e}")breakif __name__ == '__main__':# 创建一个 TCP 套接字server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定套接字到指定的主机和端口server_address = ('localhost', 6666)server_socket.bind(server_address)# 开始监听连接server_socket.listen(5)  # 最多同时监听 5 个连接请求print("等待客户端连接...")while True:# 等待客户端连接client_socket, client_address = server_socket.accept()print(f"接受来自 {client_address} 的连接")# 创建两个新线程分别处理接收和发送操作receive_thread = threading.Thread(target=receive_data, args=(client_socket,))send_thread = threading.Thread(target=send_data, args=(client_socket,))# 启动线程receive_thread.start()send_thread.start()

客户端测试结果: 

服务端测试结果: 

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

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

相关文章

nas汇编程序的调试排错方法

nas汇编程序的调试排错方法: 1、查找是哪一步错了 2、查看对应的*.lst文件,本例中是"asmhead.lst" 3、根据*.lst文件的[ERROR #002]提示查看源码,改错。 4、重新运行编译,OK 1、查找是哪一步错了: nask.ex…

基于任务队列的机器学习服务实现

将机器模型部署到生产环境的方法有很多。 常见的方法之一是将其实现为 Web 服务。 最流行的类型是 REST API。 它的作用是全天候(24/7)部署和运行,等待接收来自客户端的 JSON 请求,提取输入,并将其发送到 ML 模型以预测…

SpringBoot / Vue 对SSE的基本使用(简单上手)

一、SSE是什么? SSE技术是基于单工通信模式,只是单纯的客户端向服务端发送请求,服务端不会主动发送给客户端。服务端采取的策略是抓住这个请求不放,等数据更新的时候才返回给客户端,当客户端接收到消息后,…

http请求头部(header)详解

目录 常见的请求头部字段 GET方法的使用方法: POST方法的使用方法: Accept字段的使用方法 Content-Type字段的使用 总结 在互联网协议中,HTTP请求头部(header)是一个非常重要的组成部分。它们是客户端和服务器之…

【python自动化】七月PytestAutoApi开源框架学习笔记(一)

前言 本篇内容为学习七月大佬开源框架PytestAutoApi记录的相关知识点,供大家学习探讨 项目地址:https://gitee.com/yu_xiao_qi/pytest-auto-api2 阅读本文前,请先对该框架有一个整体学习,请认真阅读作者的README.md文件。 本文…

【嵌入式软件C编程】主函数free子函数malloc地址的两种方式以及注意事项

本文档主要记录嵌入式C语言在子函数中应用malloc函数的方式,在实际项目中内存管理特别重要 一般在主函数中(main)使用malloc函数,然后在通过free函数进行释放内存,但有时候如果必须在子函数长调用malloc函数该怎样进行…

基于VueCli创建自定义项目

1.安装脚手架 (已安装) npm i vue/cli -g2.创建项目 vue create hm-exp-mobile选项 Vue CLI v5.0.8 ? Please pick a preset:Default ([Vue 3] babel, eslint)Default ([Vue 2] babel, eslint) > Manually select features 选自定义手动选择功能 选择vue的版本 3.x …

电脑黑屏只有鼠标箭头?4个正确处理方法记得收藏!

“我刚刚在用电脑办公呢,突然之间电脑就黑屏了,只剩下一个鼠标箭头。这是什么原因引起的呢?怎么解决电脑黑屏的问题呀?求解答!” 不知道朋友们有没有遇到过在使用电脑时,突然电脑就黑屏了并且只剩下鼠标箭头…

国内免费无限制的chatgpt导航和ai画画

非常实用的AI网址导航,其实际使用体验非常便捷。该导航系统不仅提供了全面的网站分类和搜索功能,还对每个网站进行了精准的评估和排序。推荐高质量的网站资源,并实时检测网站的安全性,保障用户的上网安全。 总的来说&#xff1a…

RHCA之路---EX280(8)

RHCA之路—EX280(8) 1. 题目 On master.lab.example.com using the template file in http://materials.example.com/exam280/gogs as a basis, install an application in the ditto project according to the following requirements: All of the registry entries must poi…

微信小程序源码【195套】【源码导入视频教程+源码导入文档教程+详细图文文档教程】

一、项目说明 盒马鲜生.zip 轻客洗衣.zip 云文档.zip 仿ofo共享单车.zip 仿美团外卖.zip 仿饿了么.zip 灵犀外卖.zip 小契约(交友互动小程序).zip 信息科技公司展示小程序.zip 华云智慧园区.zip 房地产公司展示.zip 企业OA系统小程序.zip 优惠券卡卷小程…

整理mongodb文档:事务(一)

个人博客 整理mongodb文档:事务(一) 原文链接,个人博客 求关注,本文主要讲下怎么在mongose下使用事务,建议电脑端看 文章概叙 本文的开发环境为Nodejs,在‘单机模式’讲解最基本的事务概念。并没有涉及分片以及集群&#xff0…

ESP32C3 LuatOS RC522②写入字符串

编写了字符串转16进制表函数 -- 将字符串转换为十六进制表 local function stringToHexTable(str)local hexTable {}local maxLength 16 -- 最大长度为16个元素-- 将字符串转换为十六进制for i 1, #str doif i > maxLength thenbreakendlocal hex string.format("…

QT第一天

创建登录界面 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setFixedSize(700,800);//1.实例化一个标签,设置上面界面QLabel *lab1 new QLabel(th…

基于Mendix移动原生的离线应用

一、前言 不同行业的企业会有特殊的业务场景,比如某些制造业的企业的工厂是物理隔离的,但工程师需要拿着平板输入很多生产数据;某些煤炭和矿业企业,在实际的工作区都是比较偏远,信号比较差,但是又需要用手…

【python技巧】替换文件中的某几行

【python技巧】替换文件中的某几行 1. 背景描述2. 单行修改-操作步骤3. 多行修改-操作步骤 1. 背景描述 最近在写一个后端项目,主要的操作就是根据用户的前端数据,在后端打开项目中的代码文件,修改对应位置的参数,因为在目前的后…

浏览器安全-同源策略和CORS

同源策略 同源策略是浏览器的一个安全功能,浏览器禁止在当前域读写其他域的资源,如限制跨域发送ajax请求 不受同源策略限制的 1)页面中的链接,重定向表单以及表单提交 2)跨域资源引入 如script不受跨域限制&#xff0…

Elasticsearch:wildcard - 通配符搜索

Elasticsearch 是一个分布式、免费和开放的搜索和分析引擎,适用于所有类型的数据,例如文本、数字、地理空间、结构化和非结构化数据。 它基于 Apache Lucene 构建,Apache Lucene 是一个全文搜索引擎,可用于各种编程语言。 由于其速…

远程工作面试:特殊情况下的面试技巧

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

【Vue3 知识第四讲】数据双向绑定、事件绑定、事件修饰符详解

文章目录 一、数据双向绑定二、事件绑定详解2.1 **Vue中的事件绑定指令**2.2 **事件函数的调用方式**2.3 **事件函数参数传递** 三、事件修饰符3.1 **Vue中常用的事件修饰符**3.2 **按键修饰符** 四、属性绑定五、类与样式的绑定5.1 class 类的绑定5.2 style 样式绑定 一、数据…