# 客户端
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端用户的登录的更多相关文章

  1. SQL Server 2008 用户SA登录失败(错误18456)之图文解决方法

    SQL2008无法连接到.\SQLEXPRESS,用户'sa'登录失败(错误18456)图文解决方法 出现问题 : 标题: 连接到服务器 ------------------------------ ...

  2. Python的XMLRPC机制:实现跨进程间、client/server端通信

    SimpleXMLRPCServer模块式python语言的一个基于 xml 格式的进程间通信的基础框架. SimpleXMLRPCServer是一个单线程的服务器,这意味着,如果几个客户端同时发出多 ...

  3. 应用java多线程实现server端与多client之间的通信

    应用多线程来实现server与多线程之间的通信的基本步骤 1.server端创建ServerSocket,循环调用accept()等待client链接 2.client创建一个Socket并请求和se ...

  4. springboot+layui实现PC端用户的增删改查 & 整合mui实现app端的自动登录和用户的上拉加载 & HBuilder打包app并在手机端下载安装

    springboot整合web开发的各个组件在前面已经有详细的介绍,下面是用springboot整合layui实现了基本的增删改查. 同时在学习mui开发app,也就用mui实现了一个简单的自动登录和 ...

  5. Fms3中client端与server端交互方式汇总

    系列文章导航 Flex,Fms3相关文章索引 Flex和Fms3打造在线聊天室(利用NetConnection对象和SharedObject对象) Fms3和Flex打造在线视频录制和回放 Fms3和 ...

  6. sshSSH Secure Shell Client root用户无法登录解决办法

    最近使用这个工具,普通用户可以登录root用户不可以登录.将vi /etc/ssh/sshd_config按照下述配置解决问题 修改sshd配置文件:vi /etc/ssh/sshd_config P ...

  7. ASP.NET连接数据库时,提示“用户 'sa' 登录失败原因: 未与信任 SQL Server 连接相关联

    用ASP.NET连接数据库时,提示"用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联.".解决方法:首先检查是不是web.config文件内的用户名密码 ...

  8. sql server 用户'sa'登录失败(错误18456)(转载)

    转载地址:http://thenear.blog.51cto.com/4686262/865544 用户'sa'登录失败(错误18456)解决方案图解 当我们在使用sql server 的时候可能会遇 ...

  9. Client默认用户及登录密码(转)

    Client默认用户及登录密码 SAP系统(如ERP.CRM等)安装完成,初始化状态下有若干个客户端(Client).如果是生产系统,一般只有000.001.066等三个Client:如果是IDES系 ...

随机推荐

  1. latex 入门及使用

    latex 入门及使用 LaTeX新人教程,30分钟从完全陌生到基本入门 >> vim test.tex \documentclass[11pt,twoside,a4paper]{arti ...

  2. python中将HTTP头部中的GMT时间转换成datetime时间格式

    原文: https://blog.csdn.net/zoulonglong/article/details/80585716 需求背景:目前在做接口的自动化测试平台,由于接口用例执行后返回的结果中的时 ...

  3. eventql部署过程

    1. 环境准备install cmake make automake autoconf zlib-devel libtoolyum install zlib-devel---------------- ...

  4. HTML5之viewport使用

    好久都没更新博客了,最近一年转型移动端,当然网页端也得兼顾,慢慢写一写基本性的文章,多积累. 本期介绍下viewport的一些使用: 先看看viewport在页面中的样子: <meta name ...

  5. python之路之装饰器

    一 装饰器进化之路1) import time def index(): start_time=time.time() time.sleep() print('welcome to index wor ...

  6. 线程使用方法 锁(lock,Rlock),信号了(Semaphore),事件(Event),条件(Ccndition),定时器(timer)

    2线程的使用方法  (1)锁机制       递归锁           RLock()    可以有无止尽的锁,但是会有一把万能钥匙       互斥锁:           Lock()     ...

  7. springTask任务调度

    1什么是任务调度 在企业级应用中,经常会制定一些“计划任务”,即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作.常见的任务调度框架有Quartz和Sprin ...

  8. 奇技淫巧:在spring官网上下载历史版本的spring插件,springsource-tool-suite

    转自:https://blog.csdn.net/PacosonSWJTU/article/details/80959689 目前spring官网(http://spring.io/tools/sts ...

  9. VB6 内存释放

    VB在内存释放方面是这样的, 首先和其他任何语言一样,如果是在stack分配的空间的话,操作系统自动进行管理 比如下面的语句 dim a as string '当a 超出它的作用范围以后,就会被释放掉 ...

  10. TensorFlow入门-Tianic数据集训练

    import pandas as pd import tensorflow as tf from sklearn.model_selection import train_test_split imp ...