python 服务端与c++客户端通讯_[原创]python socket 服务端 与 c++客户端通讯,发包内容加密,支持大文件,并发...
代码经过网络搜索,综合算是原创吧.py脚本为服务端
项目文件在
https://github.com/jinjie412/service_client_socket
import socketserver
import json
import base64
import os
from te import OPMysql,Caltime
import time
#数据库操作
opm = OPMysql()
#加密发包内容
def crypt(source,key):
from itertools import cycle
result=''
temp=cycle(key)
for ch in source:
result=result+chr(ord(ch)^ord(next(temp))^ord('1'))
return result
def jiami(f,key):
if os.path.isfile(f):
f=open(f,encoding='gbk')
content=f.read()
# print(content)
f.close()
print(content)
# content=content.encode(encoding='gbk')
content=crypt(content,key)
print(content)
content=crypt(content,key)
print(content)
content=content.encode(encoding='gbk')
print(content)
file_size = len(content)
return file_size,content
else:
return None,False
#数据库搜索客户端发送来的信息有效性
def yz(datajs):
sql = "select id,user,dqsj,rjbh from kh where user='%s' and rjbh='%s'" %(datajs['user'],datajs['rjbh'])
res = opm.op_select(sql)
#验证用户有效性
if res:
# print(res)
timeArray = time.strptime(res[2], "%Y-%m-%d %H:%M:%S")
# print(timeArray)
#验证用户卡是否到期
dt=Caltime(time.localtime(),timeArray)
return dt
else:
return False
class myTCPhandler(socketserver.BaseRequestHandler):
def handle(self):
while True:
self.data = self.request.recv(1024).decode('gbk', 'ignore').strip()
if not self.data : break
self.data=base64.b64decode(self.data)
print(self.data)
datajs = json.loads(self.data)
print(datajs)
if yz(datajs):
#发送数据长度,发送数据内容
dsize,data = jiami('./js/'+datajs["jb"],datajs['key'])
if dsize:
#向客户端发送数据长度
self.feedback_data = ('%d' % (dsize,)).encode('gbk')
self.request.sendall(self.feedback_data)
#等待客户端返回
feedback = self.request.recv(100).decode('gbk', 'ignore').strip() #等待客户端确认
print(feedback)
if int(feedback) == dsize:
#发送所有数据
self.request.sendall(data)
else:
print('open file error')
else:
print('erro')
self.feedback_data = 'erro'.encode('gbk')
self.request.sendall(base64.b64encode(self.feedback_data))
def finish(self):
print("client is disconnect!")
host = '127.0.0.1'
port = 9090
server = socketserver.ThreadingTCPServer((host,port),myTCPhandler)
server.serve_forever()
te.py 文件
使用了数据库连接池,网络搜索
import MySQLdb
from DBUtils.PooledDB import PooledDB
import time
import datetime
mysqlInfo = {
"host": 'localhost',
"user": 'root',
"passwd": '000000',
"db": 'w',
"port": 3306,
"charset": 'utf8'
}
class OPMysql(object):
__pool = None
def __init__(self):
# 构造函数,创建数据库连接、游标
self.coon = OPMysql.getmysqlconn()
self.cur = self.coon.cursor()
# 数据库连接池连接
@staticmethod
def getmysqlconn():
if OPMysql.__pool is None:
__pool = PooledDB(creator=MySQLdb, mincached=5, maxcached=20, host=mysqlInfo['host'], user=mysqlInfo['user'], passwd=mysqlInfo['passwd'], db=mysqlInfo['db'], port=mysqlInfo['port'], charset=mysqlInfo['charset'])
print(__pool)
return __pool.connection()
# 插入\更新\删除sql
def op_insert(self, sql):
pass
# 查询
def op_select(self, sql):
try:
# print('op_select', sql)
self.cur.execute(sql) # 执行sql
select_res = self.cur.fetchone() # 返回结果为字典
# select_res =self.cur.fetchall()
return select_res
except Exception as e:
print(str(e))
return False
#释放资源
def dispose(self):
self.coon.close()
self.cur.close()
#计算到期时间
def Caltime(date1,date2):
date1=datetime.datetime(date1[0],date1[1],date1[2],date1[3],date1[4],date1[5])
date2=datetime.datetime(date2[0],date2[1],date2[2],date2[3],date2[4],date2[5])
return date2>date1
if __name__ == '__main__':
#申请资源
opm = OPMysql()
sql = "select id,user,dqsj,rjbh from w_kh where user='000' and rjbh='000'"
res = opm.op_select(sql)
print(res)
timeArray = time.strptime(res[2], "%Y-%m-%d %H:%M:%S")
print(timeArray)
dt=Caltime(time.localtime(),timeArray)
print(dt)
最后于 2018-5-5 12:27
被进口坚果编辑
,原因:
python 服务端与c++客户端通讯_[原创]python socket 服务端 与 c++客户端通讯,发包内容加密,支持大文件,并发...相关推荐
- socket客户端和服务器通信协议,51. Socket服务端和客户端使用TCP协议通讯
Socket服务器是网络服务中常用的服务器.使用 go 语言实现这个业务场景是很容易的. 这样的网络通讯,需要一个服务端和至少一个客户端. 我们计划构建一个这样的通讯过程.服务端启动后等待客户端的访问 ...
- python监听多个udp端口_用Python写一个UDP端口测试工具(一)
需求 最近有个运维需求,需要测试客户端的UDP端口与服务器的连通性. 需求也很简单:客户端测往服务端发UDP包,服务端收到包后响应客户端,当客户端能收到服务端的响应则可断定端口是可达的.但是客户端需要 ...
- 微服务及微应用拆分原则_七个微服务原则
微服务及微应用拆分原则 This post defines microservices via seven tenets, reverse-engineered from books, article ...
- python查询和替换一个文本字符串_【Python】python面试题
一些Python面试题 1. (1)python下多线程的限制以及多进程中传递参数的方式 python多线程有个全局解释器锁(global interpreter lock),这个锁的意思是任一时间只 ...
- 微服务微应用的安全测试_如何降低微服务测试成本?经验之谈
前言 随着云原生时代的到来,越来越多的应用生在云上,长在云上,云原生是企业落地微服务的最佳伴侣.但云上应用易测性受到了很大的挑战,如何提高云上应用易测性,增强 DevOps 能力,是微服务测试要解决的 ...
- python linux系统管理与自动化运维_《Python Linux系统管理与自动化运维》赖明星著【摘要 书评 在线阅读】-苏宁易购图书...
商品参数 作者: 赖明星著 出版社:机械工业出版社 出版时间:2017-09-01 版次:1 开本:16开 装帧:平装 ISBN:9787111578659 版权提供:机械工业出版社 基本信息 商品名 ...
- python交互式编程入门先学什么_为什么 Python 对于编程入门学习来说,是一门很棒的语言...
在这篇文章里,我会来阐述下为什么我觉得 Python 对于计算机编程入门教学来说是一门很棒的编程语言(对基础编程课程更多观点可以查看这篇文章).这也是从我针对初学者Python 编程教学过程中获得并总 ...
- python社区版可以用库么_应用Python,你不但能够得到出色的小区适用和普遍的库集...
哪样计算机语言最好是?这个问题很有可能始终不容易找答案.萝卜青菜,各有所好,AI技术工程师和生物学家能够依据新项目必须,从诸多计算机语言中挑选最合适自身的. 选Python還是选Java?2020年, ...
- python写入excel表格数据绘制图表_(原创)xlsxwriter,python excel 写入数据\图表等操作_图表操作(二)...
前面分享了使用xlsxwriter创建excel和写入数据GUC:(原创)xlsxwriter,python excel 写入数据\图表等操作_创建.写入(一)zhuanlan.zhihu.com ...
最新文章
- AJAX范例大搜罗(转载)
- 哈希表(HASHTABLE)
- Windows环境:VMware下linux虚拟机与Windows主机进行文件共享的方法
- c语言键盘输入若干个数据,//从键盘上输入若干整数,并将其存入数组中,并统计输入数据的个...
- Asp.Net Core Ocelot Consul 微服务
- android TextView下划线,圆角边框,数逐字显示,虚线边框, 渐变色背景框, 阴影背景框
- Linux操作系统下进程讲解(史上最强总结)
- MySQL-InnoDB-事务
- 直接学python3_新手应该学python2还是python3?
- [Material Design] MaterialButton 效果进阶 动画自动移动进行对齐效果
- 移动html5 滑动 zepto,移动端使用zepto编写的滑动事件
- 鲍威尔共轭方向法c语言程序,鲍威尔共轭方向法VB源程序
- Ricequant-估值因子的分析
- ARM开发初级-Windows环境下的STM32开发环境搭建(包含missing compiler version 5的解决方法)-学习笔记02
- com.google.guava包里面的相关简单方法
- 利用关联规则挖掘中医证素与恶性肿瘤的关系
- python笔记2 - 函数,表达式,语句
- realtek是什么意思_realtek bluetooth是什么意思
- 社工的危害性(一)菜鸟经验_星语惜馨_新浪博客
- 网络购车平台哪家强?
热门文章
- MySQL查看数据库系统正在运行的进程
- Java Servlet 编程,重定向介绍
- stack java实现_Stack (堆栈)使用JAVA实现
- matlab 返回变量类型的命令,MATLAB主要命令汇总
- android 扫描照片功能,Android自定义View- 雷达扫描图
- matlab resample上采样,resample matlab实现
- 数据结构【双指针算法】
- android 圆角按钮渐变,Android实现圆形渐变加载进度条
- 去重 属性_面试中常问的List去重问题,你都答对了吗?
- pycharm cant open file_PyCharm