# 客户端
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. jmeter监控服务器的方法

    先下载Jmeter资源监控插件,我的百度云jmeter视频里面有说. 地址如下: JMeterPlugins-Standard-1.3.1.zip  下载 https://jmeter-plugins ...

  2. 自绘图片下拉项 combobox listbox

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  3. Flex 学习

    Flex案例一: <html> <head> <meta http-equiv="Content-Type" content="text/h ...

  4. jquery拖动分页

    scrollpagination.js /* ** Anderson Ferminiano ** contato@andersonferminiano.com -- feel free to cont ...

  5. Ubuntu14.04下codeblocks手动编译配置bost_1_57_0

    环境:ubuntu 14.04  32bit,boost_1_57_0 前期准备:boost中,用到了别的函数库,所以为了使用boost中相应的功能,需要先安装系统中可能缺失的库 apt-get in ...

  6. json化的必要性

    参考文章:http://www.cnblogs.com/SanMaoSpace/p/3139186.html http://www.oschina.net/question/100267_61459

  7. 框架之Tornado(简单介绍)

    引言 回想Django的部署方式 以Django为代表的python web应用部署时采用wsgi协议与服务器对接(被服务器托管),而这类服务器通常都是基于多线程的,也就是说每一个网络请求服务器都会有 ...

  8. cplexJava源码---计算结果

    public static class CplexStatus implements Serializable { static final long serialVersionUID = -7367 ...

  9. Python入门-散点图绘制

    Python入门-散点图绘制  废话不说 直接上代码 import matplotlib.pyplot as plt x_values = list(range(1,1001)) y_values = ...

  10. python编程之禅

    在python界面输入 import this >>> import this The Zen of Python, by Tim Peters Beautiful is bette ...