当前位置: 首页 > article >正文

网络编程入门 Python Socket 实现一个简单的用户认证系统

# Python Socket 实现一个简单的用户认证系统 这次写的是一个简单的用户认证系统。 整体思路是 1. 服务端负责保存和校验用户名、密码 2. 客户端负责输入用户名、密码 3. 客户端把用户输入的数据发送给服务端 4. 服务端判断用户名和密码是否正确 5. 服务端把登录结果返回给客户端 这个案例主要用到了三个知识点 python socket json 文件读取一、项目结构这个用户认证系统里面主要有三个文件用户认证系统 ├── client.py ├── server.py └── 用户名和密码.txt其中client.py是客户端代码负责让用户输入用户名和密码。server.py是服务端代码负责接收客户端发来的数据并进行认证。用户名和密码.txt是保存用户名和密码的文件。文件内容是zcx123456也就是说目前系统中有一个用户用户名zcx 密码123456二、服务端代码服务端代码如下importsocketimportjson serversocket.socket(socket.AF_INET,socket.SOCK_STREAM)server.bind((127.0.0.1,8001))server.listen(5)whileTrue:conn,addrserver.accept()print(有客户端来连接了)conn.sendall(欢迎使用用户认证系统.encode(utf-8))whileTrue:dataconn.recv(1024)ifdata.encode(utf-8):breakuser_dictjson.loads(data.decode(utf-8))user_nameuser_dict[username]user_passworduser_dict[password]foundFalseauthenticatedFalsewithopen(用户名和密码.txt,r,encodingutf-8)asf:forlineinf:lineline.strip()ifnotline:continuefile_username,file_passwordline.split( )iffile_usernameuser_name:foundTrueiffile_passworduser_password:authenticatedTruebreakiffoundandauthenticated:conn.sendall(登录成功.encode(utf-8))breakeliffoundandnotauthenticated:conn.sendall(密码错误.encode(utf-8))else:conn.sendall(用户名不存在.encode(utf-8))conn.close()三、创建 socket 服务端首先创建一个 socket 对象serversocket.socket(socket.AF_INET,socket.SOCK_STREAM)这里的socket.AF_INET表示使用 IPv4 地址。socket.SOCK_STREAM表示使用 TCP 协议。TCP 是一种可靠连接客户端和服务端建立连接之后就可以互相发送数据。四、绑定地址和端口服务端需要绑定 IP 和端口server.bind((127.0.0.1,8001))这里的127.0.0.1表示本机地址。8001表示端口号。也就是说这个服务端运行在本机的8001端口上。然后开始监听server.listen(5)表示服务端开始等待客户端连接。五、等待客户端连接服务端通过下面这句代码等待客户端连接conn,addrserver.accept()当客户端连接成功后accept()会返回两个值conn表示客户端和服务端之间的连接对象。addr表示客户端的地址信息。连接成功之后服务端会打印有客户端来连接了然后给客户端发送欢迎信息conn.sendall(欢迎使用用户认证系统.encode(utf-8))因为网络传输的数据必须是字节类型所以字符串需要先进行编码encode(utf-8)六、接收客户端发来的数据服务端使用下面这句代码接收客户端数据dataconn.recv(1024)这里的1024表示一次最多接收 1024 个字节。客户端发来的数据是 JSON 字符串所以服务端需要先解码data.decode(utf-8)然后再用json.loads()转成 Python 字典user_dictjson.loads(data.decode(utf-8))客户端发送的数据格式大概是这样{username:zcx,password:123456}所以服务端可以这样取出用户名和密码user_nameuser_dict[username]user_passworduser_dict[password]七、读取用户名和密码文件服务端会打开保存用户名和密码的文件withopen(用户名和密码.txt,r,encodingutf-8)asf:然后一行一行读取forlineinf:每一行的数据格式是用户名 密码比如zcx123456所以可以使用空格分割file_username,file_passwordline.split( )这样就可以拿到文件中的用户名和密码。八、判断用户名和密码是否正确代码中定义了两个变量foundFalseauthenticatedFalsefound表示是否找到了这个用户名。authenticated表示密码是否认证成功。判断逻辑是iffile_usernameuser_name:foundTrueiffile_passworduser_password:authenticatedTruebreak如果用户名匹配就把found改成True。如果密码也匹配就把authenticated改成True。九、返回登录结果最后根据判断结果服务端会返回不同的信息。如果用户名存在并且密码正确conn.sendall(登录成功.encode(utf-8))如果用户名存在但是密码错误conn.sendall(密码错误.encode(utf-8))如果用户名不存在conn.sendall(用户名不存在.encode(utf-8))这样客户端就可以根据服务端返回的结果知道登录是否成功。十、客户端代码客户端代码如下importsocketimportjson clientsocket.socket(socket.AF_INET,socket.SOCK_STREAM)client.connect((127.0.0.1,8001))messageclient.recv(1024)print(message.decode(utf-8))whileTrue:usernameinput(请输入你的用户名(Q退出))ifusernameQ:breakpasswordinput(请输入你的密码(Q退出))ifpasswordQ:breakuser_data{username:username,password:password}client.sendall(json.dumps(user_data,ensure_asciiFalse).encode(utf-8))log_messageclient.recv(1024)iflog_message.decode(utf-8)登录成功:print(log_message.decode(utf-8))breakelse:print(log_message.decode(utf-8)请重新输入(Q退出))十一、客户端连接服务端客户端同样先创建 socket 对象clientsocket.socket(socket.AF_INET,socket.SOCK_STREAM)然后连接服务端client.connect((127.0.0.1,8001))这里连接的是本机的8001端口。所以运行程序时必须先运行服务端server.py再运行客户端client.py。连接成功之后客户端会先接收服务端发来的欢迎信息messageclient.recv(1024)print(message.decode(utf-8))输出结果是欢迎使用用户认证系统十二、输入用户名和密码客户端通过input()获取用户输入usernameinput(请输入你的用户名(Q退出))如果用户输入Q就退出程序ifusernameQ:break密码也是一样passwordinput(请输入你的密码(Q退出))然后把用户名和密码放到一个字典中user_data{username:username,password:password}十三、使用 JSON 发送数据字典不能直接通过 socket 发送所以需要先转成 JSON 字符串json.dumps(user_data,ensure_asciiFalse)然后再编码成字节.encode(utf-8)完整发送代码是client.sendall(json.dumps(user_data,ensure_asciiFalse).encode(utf-8))这里的ensure_asciiFalse是为了让中文能够正常显示不会被转义成 Unicode 编码。十四、接收登录结果客户端发送用户名和密码之后会等待服务端返回结果log_messageclient.recv(1024)然后判断是否登录成功iflog_message.decode(utf-8)登录成功:print(log_message.decode(utf-8))breakelse:print(log_message.decode(utf-8)请重新输入(Q退出))如果服务端返回登录成功客户端打印结果并退出循环。如果返回密码错误或者用户名不存在客户端会提示重新输入。十五、运行流程运行时需要先启动服务端python server.py然后再启动客户端python client.py客户端显示欢迎使用用户认证系统 请输入你的用户名(Q退出)如果输入zcx再输入密码123456服务端验证通过客户端输出登录成功如果用户名正确但是密码错误就会输出密码错误请重新输入(Q退出)如果用户名不存在就会输出用户名不存在请重新输入(Q退出)十六、总结这个用户认证系统虽然比较简单但是已经包含了一个客户端和服务端通信的基本流程。它主要实现了这些功能服务端监听端口等待客户端连接客户端连接服务端客户端输入用户名和密码使用 JSON 格式发送用户数据服务端读取本地文件中的用户名和密码服务端判断用户是否存在、密码是否正确服务端把登录结果返回给客户端这个案例可以帮助我们理解socket是如何完成网络通信的。json是如何在客户端和服务端之间传递结构化数据的。文件读取是如何用来保存和查询用户信息的。简单来说这个项目就是客户端输入账号密码 ↓ 通过 socket 发送给服务端 ↓ 服务端读取文件进行校验 ↓ 把登录结果返回给客户端这就是一个最基础版本的 Python 用户认证系统。

相关文章:

网络编程入门 Python Socket 实现一个简单的用户认证系统

# Python Socket 实现一个简单的用户认证系统这次写的是一个简单的用户认证系统。整体思路是:1. 服务端负责保存和校验用户名、密码 2. 客户端负责输入用户名、密码 3. 客户端把用户输入的数据发送给服务端 4. 服务端判断用户名和密码是否正确 5. 服务端把登录结果返…...

为什么92%的Lovable新手在第5小时放弃?——资深架构师拆解3个致命认知盲区

更多请点击: https://codechina.net 第一章:Lovable应用开发入门与环境搭建 Lovable 是一个面向现代 Web 应用的轻量级全栈框架,专为快速构建可维护、可扩展且富有表现力的交互式应用而设计。它融合了声明式 UI、响应式状态管理与内置服务抽…...

【Flink学习】(五)Flink 并行度与任务链,任务运行核心原理

本文主要整理Flink 底层任务运行机制,学会合理设置并行度,初步具备任务调优思维。 一、并行度概念 并行度代表 Flink 任务运行的线程数量,决定任务处理速度,分为全局并行度、算子并行度、客户端并行度。 二、并行度设置 分为三种方…...

Windhawk终极指南:5分钟掌握Windows系统个性化定制

Windhawk终极指南:5分钟掌握Windows系统个性化定制 【免费下载链接】windhawk The customization marketplace for Windows programs: https://windhawk.net/ 项目地址: https://gitcode.com/gh_mirrors/wi/windhawk Windows系统定制一直是许多用户的痛点&am…...

Wordpress网站使用siteground security optimizer 及 translatepress多语言插件的翻译问题

问题:发现有的页面翻译出错,如下图:经排查,原因是 SiteGround 主机安全插件中的“锁定并保护系统文件夹”功能,阻止了 TranslatePress 插件的 trp-ajax.php 文件正常执行。解决方法:将 trp-ajax.php 加入白…...

3分钟彻底清理Windows系统:Win11Debloat让你的电脑重获新生

3分钟彻底清理Windows系统:Win11Debloat让你的电脑重获新生 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter a…...

从零训练潮州话语音克隆模型:ElevenLabs Fine-tuning实战(附1782条标注语料清洗脚本)

更多请点击: https://codechina.net 第一章:从零训练潮州话语音克隆模型:ElevenLabs Fine-tuning实战(附1782条标注语料清洗脚本) 语料准备与质量校验 潮州话语音克隆对数据一致性要求极高。我们采集并人工标注了178…...

使用Taotoken后API调用稳定性与延迟的实际体验观察

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken后API调用稳定性与延迟的实际体验观察 在最近一个为期一周的后端服务开发项目中,我们将原本直接调用多个厂…...

Audio Slicer:智能音频分割终极指南,告别繁琐手动剪辑

Audio Slicer:智能音频分割终极指南,告别繁琐手动剪辑 【免费下载链接】audio-slicer A simple GUI application that slices audio with silence detection 项目地址: https://gitcode.com/gh_mirrors/aud/audio-slicer 还在为音频剪辑的繁琐操作…...

Windows和Office激活终极指南:KMS_VL_ALL_AIO一键解决方案

Windows和Office激活终极指南:KMS_VL_ALL_AIO一键解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows和Office的激活问题烦恼吗?每次重装系统都要重新…...

智界V9,50万的豪华MPV来了

鸿蒙智行旗下首款旗舰MPV——智界V9正式亮相了。目前的高端MPV市场格局跟之前有很大改变,尤其是四十万之上这个段位,以前基本被几家合资老牌霸占,如今本土的科技企业和新势力一窝蜂杀进来。智界V9的起步价为38.98万,高端款51.98万…...

3个核心功能:用HSTracker将炉石传说数据转化为你的制胜优势

3个核心功能:用HSTracker将炉石传说数据转化为你的制胜优势 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker 在炉石传说的竞技场上,每一张卡牌的抽…...

写给前端的 CANN-ops-fft:昇腾FFT算子库到底是啥?

写给前端的 CANN-ops-fft:昇腾FFT算子库到底是啥? 之前做信号处理,兄弟问我:“哥,我想做频域分析,昇腾上有现成的 FFT 库吗?” 好问题。今天一次说清楚。 ops-fft 是啥? ops-fft Op…...

【硬核测评】程序员专属AI面霸养成指南:鹅来面OfferGoose,真的能让你Offer拿到手软?

一、AI面试工具:程序员求职的“智能外挂”,你跟上节奏了吗?在当今内卷激烈的互联网求职环境中,面试环节的难度与复杂度不断攀升。从在线笔试的代码挑战,到远程视频面试的即时问答,再到大厂多轮技术面试的压…...

【MATLAB源码-第442期】基于MATLAB的OFDM系统PAPR抑制算法仿真及限幅压扩SLM、PTS与TR性能对比

操作环境:MATLAB 2024a1、算法描述摘要 正交频分复用技术能够把高速数据流分解到多个正交子载波上传输,因此在宽带通信系统中具有较高的频谱利用率和较强的抗频率选择性衰落能力。公开资料显示,OFDM 已经用于 DAB、DVB、WLAN、WiMAX、第四代和…...

开源数据库 TimescaleDB 2.27.1 发布:性能改进与多项错误修复,官方建议尽快升级

开源数据库 TimescaleDB 2.27.1 版本正式发布,较 2.27.0 版本有性能改进和错误修复,官方建议用户尽快升级。 TimescaleDB 简介 TimescaleDB 是基于 PostgreSQL 构建的开源数据库,打包为 PostgreSQL 扩展程序,可让 SQL 扩展到时间序…...

2026企业网盘怎么选?十大产品深度测评:从合规到协作一次讲清

企业网盘已经不只是“存文件”这么简单了。2026年,远程办公常态化、数据合规持续收紧、企业开始把“文件”当作数字资产来治理——网盘也从“云端U盘”进化为企业数字资产管理的底座。 过去选网盘,很多企业只看容量和价格;现在真正拉开差距的…...

git常用使用命令(亲测,可以,自己的笔记)

一本 官方中文版 书分享给大家(说明:本人多次阅读,体会是容易入门,读起来很顺手,但是讲的不深入) https://git-scm.com/book/zh/v2 一、git官方使用命令: usage: git [--version] [--help] [-C…...

十大榜单全覆盖,价值兑现引领:联想定义中国AI企业新高度

当前,全球 AI 产业已正式迈入规模化商业落地的关键周期,“技术炫技”让位于“价值兑现”,“算力筑基—技术创新—场景落地”的协同闭环成为高质量发展的核心逻辑。据《全球首席信息官(CIO)报告:企业级 AI 竞…...

利用Taotoken为Claude Code配置稳定后备API解决封号与Token不足问题

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用Taotoken为Claude Code配置稳定后备API解决封号与Token不足问题 对于依赖Claude Code进行日常开发的工程师而言,服…...

Cocos学习笔记:帧动画制作与动画编辑器使用

一、帧动画基础原理核心逻辑:帧动画本质是逐帧替换精灵(Sprite)的显示图片,通过控制图片切换频率,让静态序列图呈现连续动态效果。视觉原理:人眼存在视觉残留特性,短时间内连续播放 24 帧以上图…...

具身智能(Embodied AI):当 Agent 拥有了物理世界的身体

具身智能(Embodied AI):当Agent拥有了物理世界的身体,下一个十年的科技革命? 一、引言 (Introduction) 钩子 (The Hook) 你有没有过这样的幻想:下班回家推开门,AI机器人已经做好了你爱吃的糖醋排骨,把换下来的脏衣服扔进了洗衣机,甚至还帮你把刚到的快递拆好了?过去…...

避坑指南:华为云Stack OBS 3.0对象存储部署,小型化与标准化方案到底怎么选?

华为云Stack OBS 3.0部署选型实战:小型化与标准化方案深度对比 当企业级用户面对华为云Stack OBS 3.0对象存储部署时,第一个关键决策点往往出现在架构形态的选择上——是采用轻量灵活的小型化方案,还是选择高扩展性的标准化部署?这…...

【仅限前500名设计师获取】Midjourney双色调调色板生成器(含17组经Adobe Color验证的高转化配色矩阵)

更多请点击: https://codechina.net 第一章:Midjourney双色调调色范式的底层逻辑与设计价值 双色调(Duotone)并非简单叠加两种颜色,而是基于人眼视觉感知的非线性响应特性,在Midjourney中构建的一套语义化…...

Prism Launcher:重新定义你的Minecraft启动体验

Prism Launcher:重新定义你的Minecraft启动体验 【免费下载链接】PrismLauncher A custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once (Fork of MultiMC) 项目地址: https://gitcode.com/gh_mirrors/…...

解决Claude Code频繁封号问题转向Taotoken稳定接入Anthropic模型

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 解决Claude Code频繁封号问题转向Taotoken稳定接入Anthropic模型 基础教程类,针对受Claude Code封号困扰的用户&#x…...

别再重复造轮子!用PADS自带转换器+立创EDA,5分钟搞定原理图符号同步

高效复用立创EDA资源:PADS原理图符号同步实战指南 在硬件设计领域,重复绘制原理图符号堪称工程师的"时间黑洞"。当你在立创EDA上发现完美的元器件模型时,为何还要在PADS中从零开始?本文将揭示一套被多数人忽视的PADS原生…...

TrafficMonitor插件宝典:打造你的全能桌面监控中心

TrafficMonitor插件宝典:打造你的全能桌面监控中心 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins 想要在桌面上实时监控股票行情、硬件状态、天气信息,却…...

为内部知识库问答系统集成 Taotoken 多模型增强回答多样性

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为内部知识库问答系统集成 Taotoken 多模型增强回答多样性 在企业内部知识库中构建智能问答系统,核心目标之一是提供准…...

从装饰器原理到实战:手把手教你用TypeScript为NestJS方法实现一个‘网络代理’

从装饰器原理到实战:手把手教你用TypeScript为NestJS方法实现一个‘网络代理’ 在Node.js生态中,装饰器(Decorator)作为一种元编程工具,正逐渐从实验性特性转变为现代框架的核心支柱。NestJS正是这一趋势的典型代表—…...