client / server端用户的登录
# 客户端
import socket
import hashlib
import json
import os
import struct sk = socket.socket() # 实例化
sk.connect(('127.0.0.1', )) # 请求连接 def login(): dic = {'status': False, 'username': None, 'password': None}
c =
while c: # 只循环3次
username = input('请输入用户名:')
password = input('请输入密码:') md5_obj = hashlib.md5(password.encode('utf-8')) # 加密
md5_obj.update(username.encode('utf-8')) # 加盐
pwd = md5_obj.hexdigest() # 生成最终的密文 dic['username'] = username
dic['password'] = pwd
str_dic = json.dumps(dic) # 序列化
sk.send(str_dic.encode('utf-8')) res_dic = sk.recv().decode('utf-8')
result = json.loads(res_dic) # 反序列化 if result['status']: # 判断目前用户的状态
print('登陆成功')
break
else:
print('失败,%s' % result['reason'])
c -=
def main():
login()
main()
# 服务器端
import socketserver
import json
import hashlib
import socket
import struct
import os class MySocket(socketserver.BaseRequestHandler): # socketserver.BaseRequestHandler 永久开启服务器需要的基类
def handle(self): # handle是一个固定写法
sor = '王'.encode('utf-8') # 加密需要的盐
while 1:
str_dic = self.request.recv(1024).decode('utf-8')
if not str_dic:break # 用来退出循环,当str_dic为空时退出
print(str_dic)
dic = json.loads(str_dic) # 反序列化 if not dic['status']:
'''没有登录'''
with open('info','r',encoding='utf-8') as f:
for info in f:
username, password = info.strip().split('|')
if dic['username'] == username: #
'''用户名存在'''
md5_obj = hashlib.md5(dic['password'].encode('utf-8'))
md5_obj.update(sor)
pwd_m = md5_obj.hexdigest()
if password == pwd_m:
'''密码正确'''
dic['status'] = True
else:
'''密码错误'''
dic['reason'] = '密码错误'
break
else:
'''用户名不存在'''
dic['reason'] = '用户名不存在'
res_dic = json.dumps(dic)
self.request.send(res_dic.encode('utf-8'))
else:
'''登录成功'''
break b_len_dic = self.request.recv(4)
len_dic = struct.unpack('i', b_len_dic)[0] # 解决粘包的方法
str_dic = self.request.recv(len_dic).decode('utf-8')
dic = json.loads(str_dic) if dic['opt'] == 'upload': # 上传
filename = '' + dic['filename']
with open(filename, 'ab') as f: while dic['filesize']:
content = self.request.recv(1024)
f.write(content) dic['filesize'] -= len(content) elif dic['opt'] == 'download': # 下载
file_path = self.request.recv(1024).decode('utf-8')
filename = os.path.basename(file_path)
filesize = os.path.getsize(file_path)
dic['filename'] = filename
dic['filesize'] = filesize
str_dic1 = json.dumps(dic)
len_dic1 = len(str_dic1)
b_len_dic1 = struct.pack('i', len_dic1)
self.request.send(b_len_dic1 + str_dic1.encode('utf-8'))
with open(filename, 'rb') as f:
while dic['filesize']:
content = f.read(1024)
self.request.send(content)
dic['filesize'] -= len(content)
client / server端用户的登录的更多相关文章
- SQL Server 2008 用户SA登录失败(错误18456)之图文解决方法
SQL2008无法连接到.\SQLEXPRESS,用户'sa'登录失败(错误18456)图文解决方法 出现问题 : 标题: 连接到服务器 ------------------------------ ...
- Python的XMLRPC机制:实现跨进程间、client/server端通信
SimpleXMLRPCServer模块式python语言的一个基于 xml 格式的进程间通信的基础框架. SimpleXMLRPCServer是一个单线程的服务器,这意味着,如果几个客户端同时发出多 ...
- 应用java多线程实现server端与多client之间的通信
应用多线程来实现server与多线程之间的通信的基本步骤 1.server端创建ServerSocket,循环调用accept()等待client链接 2.client创建一个Socket并请求和se ...
- springboot+layui实现PC端用户的增删改查 & 整合mui实现app端的自动登录和用户的上拉加载 & HBuilder打包app并在手机端下载安装
springboot整合web开发的各个组件在前面已经有详细的介绍,下面是用springboot整合layui实现了基本的增删改查. 同时在学习mui开发app,也就用mui实现了一个简单的自动登录和 ...
- Fms3中client端与server端交互方式汇总
系列文章导航 Flex,Fms3相关文章索引 Flex和Fms3打造在线聊天室(利用NetConnection对象和SharedObject对象) Fms3和Flex打造在线视频录制和回放 Fms3和 ...
- sshSSH Secure Shell Client root用户无法登录解决办法
最近使用这个工具,普通用户可以登录root用户不可以登录.将vi /etc/ssh/sshd_config按照下述配置解决问题 修改sshd配置文件:vi /etc/ssh/sshd_config P ...
- ASP.NET连接数据库时,提示“用户 'sa' 登录失败原因: 未与信任 SQL Server 连接相关联
用ASP.NET连接数据库时,提示"用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联.".解决方法:首先检查是不是web.config文件内的用户名密码 ...
- sql server 用户'sa'登录失败(错误18456)(转载)
转载地址:http://thenear.blog.51cto.com/4686262/865544 用户'sa'登录失败(错误18456)解决方案图解 当我们在使用sql server 的时候可能会遇 ...
- Client默认用户及登录密码(转)
Client默认用户及登录密码 SAP系统(如ERP.CRM等)安装完成,初始化状态下有若干个客户端(Client).如果是生产系统,一般只有000.001.066等三个Client:如果是IDES系 ...
随机推荐
- [转]C#API 实现锁屏+关屏
http://www.cnblogs.com/1971ruru/archive/2010/05/20/1740216.html public Form1( bool aLock ) { if (aLo ...
- 1108 Finding Average (20 分)
1108 Finding Average (20 分) The basic task is simple: given N real numbers, you are supposed to calc ...
- 文件读写’r'和’rb’区别
2012年08月22日 ⁄ 综合 ⁄ 共 849字 ⁄ 字号 小 中 大 ⁄ 评论关闭不管何种语言在进行文件读写时,大家都知道有以下模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别 ...
- python读取文件中的字典
import ast def file_read(): with open('D:\\pytharm\\jichuyufa\\day2\\pro_cty_con.txt', 'r', encod ...
- spring boot + jpa + kotlin入门实例
spring boot +jpa的文章网络上已经有不少,这里主要补充一下用kotlin来做. kotlin里面的data class来创建entity可以帮助我们减少不少的代码,比如现在这个User的 ...
- UCenter 的目录结构
以下关于文件的阐述以及代码的样例,均以 PHP 程序为例. UCenter 的目录结构 UCenter 分为服务端和客户端 2 个部分.服务端目录为“upload/”,客户端目录为“client/ ...
- sqoop2的安装配置
1.下载 wget http://mirror.bit.edu.cn/apache/sqoop/1.99.7/sqoop-1.99.7-bin-hadoop200.tar.gz 2.解压 tar -z ...
- sbt的安装测试
1.下载 wget https://github.com/sbt/sbt/releases/download/v0.13.15/sbt-0.13.15.tgz 2.安装 tar -zxvf sbt-0 ...
- 46. linux下解压.tar.gz文件
tar -zxvf jdk-7u55-linux-i586.tar.gz 步骤二:解压jdk-7u55-linux-i586.tar.gz ,执行以下命令: #mkdir /usr/local/jav ...
- leetcode748
public class Solution { public string ShortestCompletingWord(string licensePlate, string[] words) { ...