# 客户端
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. java操作Excel之POI(2)

    一.设置单元格对齐方式: /** * 设置单元格对齐方式 */ public static void main(String[] args) throws Exception { Workbook w ...

  2. windows基础应用(word)

    自动编号-最后选择一下编号格式 TAB 进入子节 shift+TAB 回退到父节 取消邮箱/网址链接 ctrl+z word中输入不认识生僻字:输入偏旁部首王,选中插入中寻找 输入英文时,更改大小写/ ...

  3. httpclient 用户名密码认证实例

    import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.com ...

  4. IE浏览器中overflow:hidden无效,内层元素超出外层div的解决方法

    原文地址:http://www.xin126.cn/show.asp?id=2624 在用css布局的时候,用IE浏览器(ie6.ie7.ie8)预览,有时候会出现内层元素(内部DIV.图片等)超出外 ...

  5. 跨域获取json数据

    原文地址:http://my.oschina.net/LinBandit/blog/34570   前阵子做了一个前端动态加载json数据的应用,其中使用xmlhttprequest动态加载js,但是 ...

  6. Python - Django - 登录页面

    登录页 login.html: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta char ...

  7. OpenCL 查询平台和设备

    ▶ 查询平台和设备的代码以结果,放在这里方便以后逐渐扩充和查询(没有营养) #include <stdio.h> #include <stdlib.h> #include &l ...

  8. 61. oracle给用户解锁

    1.查看用户状态select username,account_status from dba_users where username='test'; 2.解锁: ALTER USER YS_ADM ...

  9. springboot之登录注册

    springboot之登录注册 目录结构 pom.xml <?xml version="1.0" encoding="UTF-8"?> <pr ...

  10. Tocmat 启动错误 Port 8005 required by tomcat v7.0 server at localhost is already in use

    1: netstat -ano!findstr 8005 2: taskkill /pid 6476 /f