Python Socket Sever
1. Server code
1 # !/usr/bin/env python
2 # coding:utf-8
3 import multiprocessing
4 import socket
5 import sys
6 import json
7 import time
8
9 import app
10
11
12 class Server(object):
13 address_family = socket.AF_INET
14 socket_type = socket.SOCK_STREAM
15 request_queue_size = 5
16
17 def __init__(self, server_address):
18 try:
19 self.listen_socket = socket.socket(self.address_family, self.socket_type)
20 self.listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
21 self.listen_socket.bind(server_address)
22 self.listen_socket.listen(self.request_queue_size)
23 except socket.error as e:
24 print(e)
25 exit()
26
27 self.servr_name = "pythonserver"
28 self.server_port = server_address[1]
29 self.client_socket = None
30 self.application = None
31 self.recv_data = None
32 self.headers_set = None
33
34 def serve_forever(self):
35 while True:
36 print(time.time())
37 self.client_socket, client_address = self.listen_socket.accept()
38 new_client_process = multiprocessing.Process(target=self.handle_request)
39 # new_client_process.daemon = True
40 new_client_process.start()
41
42 # self.client_socket.close()
43 # print('close')
44
45 def set_app(self, application):
46
47 self.application = application
48
49 def handle_request(self):
50 self.recv_data = self.client_socket.recv(2014)
51 recv_str = str(self.recv_data, encoding='utf-8')
52 recv_json = json.loads(recv_str)
53 env = recv_json
54 body_content = self.application(env, self.start_response)
55 self.finish_response(body_content)
56
57 def start_response(self, status, response_headers):
58 self.headers_set = [status, response_headers]
59
60 def finish_response(self, body_content):
61 try:
62 status, response_headers = self.headers_set
63 self.client_socket.send(bytes(response_headers, encoding="utf8"))
64 except Exception as e:
65 print(str(e))
66 self.client_socket.send(bytes(str(e), encoding="utf8"))
67 finally:
68 self.client_socket.close()
69
70
71 server_addr = (HOST, PORT) = '', 8888
72 python_root = './wsgiPy'
73
74
75 def make_server(server_addr, application):
76 server = Server(server_addr)
77 server.set_app(application)
78 return server
79
80
81 def main():
82 module, application = ('app', 'app')
83 sys.path.insert(0, python_root)
84 module = __import__(module)
85 application = getattr(module, application)
86 httpd = make_server(server_addr, application)
87 print('listening on port %d ...\n' % PORT)
88 httpd.serve_forever()
89
90
91 if __name__ == '__main__':
92 multiprocessing.freeze_support()
93 main()
2. Code App(application process)
# !/usr/bin/env python
# -*- coding:utf-8 -*-
import pandas as pd
import os
import os.path
import configparser CONFIGPATH = './config.ini' def app(environ, start_response):
try:
method = environ['method']
data = environ['data']
print('entry app')
if method == 'get_repository':
ret = get_repository(data)
print('get_repository')
elif method == 'authority_check':
ret = authority_check(data)
print('authority_check') status = '200 OK'
response_headers = ret
start_response(status, response_headers)
except Exception as e:
print(str(e))
start_response('400', str(e)) def get_repository(data=None):
user_name = data['name']
prj_name = data['project']
conf = load_config()
data_excel = pd.read_excel(conf.user_info, sheet_name=None) user = data_excel['user']
project = data_excel['project'] try:
df_user = user[user['User name'] == user_name]
group = df_user['Group name'].values.tolist()[0]
df_proj = project[(project['Project name'] == prj_name) & (project['Group name'] == group)]
url = df_proj['Gitlab path'].values.tolist()[0]
return url
except Exception as e:
print(str(e))
return '' def authority_check(data=None):
user_name = data['name']
prj_name = data['project']
conf = load_config()
data_excel = pd.read_excel(conf.user_info, sheet_name=None)
user = data_excel['user']
project = data_excel['project']
try:
df_user = user[user['User name'] == user_name]
group1 = df_user['Group name'].values.tolist()[0]
df_proj = project[project['Project name'] == prj_name]
if df_proj.empty():
return 'N, no such a project:' + prj_name
group2 = df_proj['Group name'].values.tolist()[0]
if group1 == group2:
return 'Y'
else:
return 'N,you do not have authority of ' + group2
except Exception as e:
print(str(e))
return str(e) def load_config(path='./config.ini'):
conf = ConfigHandle()
conf.load_config()
return conf class ConfigHandle(object):
def __init__(self):
self.conf_path = CONFIGPATH
self.user_info = ''
self.user = ''
self.passw = '' @staticmethod
def deal_path(path_name):
"""deal with windows file path"""
if path_name:
path_name = path_name.strip() if path_name:
path_name = r'%s' % path_name
path_name = path_name.replace('/', '\\')
path_name = os.path.abspath(path_name)
if path_name.find(":\\") == -1:
path_name = os.path.join(os.getcwd(), path_name)
return path_name def load_config(self):
"""load configuration from config.ini file
:return:
"""
file = self.deal_path(CONFIGPATH)
if not os.path.isfile(file):
print('Can not find the config.ini!')
return False
parser = configparser.ConfigParser()
parser.read(file, encoding='UTF-8') self.user_info = parser.get('pathconfig', 'user_info').strip() return self
3. Client Code
# !/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
import json # 链接服务端ip和端口
ip_port = ('sinm1bappt55.ent.com', 8888)
# ip_port = ('localhost', 8888)
# 生成一个句柄
sk = socket.socket()
# 请求连接服务端
sk.connect(ip_port) req_dic = {
'method': 'get_repository',
'data': {'name': 'WANGZ94',
'project': 'TEST'}
} send_json = json.dumps(req_dic) # 发送数据
sk.sendall(bytes(send_json, 'utf8'))
# 接受数据
server_reply = sk.recv(1024)
# 打印接受的数据
print(str(server_reply, 'utf8'))
# 关闭连接
sk.close()
4. user
# !/usr/bin/env python
# coding:utf-8 # *&----------------------------------------------------*
# *& Author : Joe Wang *
# *& Creation Date: 2021.08.27 *
# *& Description : this script is a http client , for *
# testing socket server *
# *& Change Tags : initial *
# *&----------------------------------------------------*
# *&----------------------------------------------------*
# *& Author : Joe Wang *
# *& Creation Date: 2021.08.28 *
# *& Description : bug fix *
# *& Change Tags : Begin Add:JoeWang-20210828 *
# *& End Add:JoeWang-20210828 *
# *& Begin Del:JoeWang-20210828 *
# *& End Del:JoeWang-20210828 *
# *&----------------------------------------------------* import socket
import json
import socket
import getpass class AuthorityCheck(object):
def __init__(self, project, url, port):
self.project = project
self.user = self.get_user()
self.url = url
self.port = port
self.ret = self.authority_check() def authority_check(self):
# 链接服务端ip和端口
ip_port = (self.url, self.port)
# 生成一个句柄
sk = socket.socket()
# 请求连接服务端
sk.connect(ip_port) req_dic = {
'method': 'authority_check',
'data': {'name': self.user,
'project': self.project}
} send_json = json.dumps(req_dic) # 发送数据
sk.sendall(bytes(send_json, 'utf8'))
# 接受数据
server_reply = sk.recv(1024)
# 关闭连接
sk.close()
# 打印接受的数据
return str(server_reply, 'utf8') def get_user(self):
""" :return:
"""
user_name = getpass.getuser()
return user_name.upper()
Python Socket Sever的更多相关文章
- Python socket doesn't close connection properly
Python socket doesn't close connection properly The error information: [Errno 98] Address already in ...
- Python socket 基础(Client) - Foundations of Python Socket
Python socket 基础- Foundations of Python Socket 建立socket - establish socket import socket s = socket. ...
- Python Socket 编程——聊天室示例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...
- Python Socket 网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
- python socket发送魔法包网络唤醒开机.py
python socket发送魔法包网络唤醒开机.py 现在的电脑应该都普遍支持有线网络的WOL了,支持无线网络唤醒的电脑,可能比较少. """ python socke ...
- Python socket编程之二:【struct.pack】&【struct.unpack】
import struct """通过 socket 的 send 和 recv 只能传输 str 格式的数据""" "" ...
- Python Socket,How to Create Socket Server? - 网络编程实例
文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...
- Python Socket,How to Create Socket Cilent? - 网络编程实例
文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...
- Python Socket通信原理
[Python之旅]第五篇(一):Python Socket通信原理 python Socket 通信理论 socket例子 摘要: 只要和网络服务涉及的,就离不开Socket以及Socket编 ...
随机推荐
- 序列化之Serializer类与ModelSerializer类的使用
序列化之Serializer类的使用(5星) 作用: 序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串 反序列化,把客户端发送过来的数据,经过request以后变成字 ...
- 一篇文章带你搞懂InnoDB的索引|结合样例
关注公众号[程序员白泽],带你走进一个不一样的程序员/学生党 前言 前阵子面试的时候,在第三面问到了MySQL索引相关的知识点,并且给出了一些SQL语句分析索引的执行情况.所以今天这篇文章给大家讲讲索 ...
- JavaScript基础第02天笔记
JavaScript基础第02天 1 - 运算符(操作符) 1.1 运算符的分类 运算符(operator)也被称为操作符,是用于实现赋值.比较和执行算数运算等功能的符号. JavaScript中常用 ...
- 2021.12.15 P2328 [SCOI2005]超级格雷码(找规律填空)
2021.12.15 P2328 [SCOI2005]超级格雷码(找规律填空) https://www.luogu.com.cn/problem/P2328 题意: 输出n位B进制的格雷码. 分析: ...
- .NET宝藏API之:IHostedService,后台任务执行
我们在项目开发的过程中可能会遇到类似后台定时任务的需求,比如消息队列的消费者. 按照.NetF时的开发习惯首先想到的肯定是Windows Service,拜托,都什么年代了还用Windows服务(小声 ...
- PostgreSQL培训认证讲师招募
中国PostgreSQL考试认证中心 以"知"之名,携手共进!不蒂于知识共享,技术传承,更愿为讲师耕织嫁衣,助您成为PostgreSQL圈的意见领袖,用知识改变世界! 一.入选讲师 ...
- 雪花算法生成分布式ID
分布式主键ID生成方案 分布式主键ID的生成方案有以下几种: 数据库自增主键 缺点: 导入旧数据时,可能会ID重复,导致导入失败 分布式架构,多个Mysql实例可能会导致ID重复 UUID 缺点: 占 ...
- 通过命令验证docker容器相当一个轻量级的Linux运行环境,且每个容器内都有一个属于自己的文件系统,容器之间相互隔离
一.docker的三个重要概念 1.镜像:打包项目带上环境,即镜像 Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的配置参数.镜像 ...
- Bugku练习题---Crypto---聪明的小羊
Bugku练习题---Crypto---聪明的小羊 flag:flag{6fde4163df05d900} 解题步骤: 1.观察题目,下载附件 2.根据题目描述,判断是栅栏密码,位移2位,白给题,上网 ...
- jQuery.extend()[$.extend()]
jQuery.extend(target, object1[,objectN]);jQuery.extend([deep], target, object1[,objectN]);jQuery.ext ...