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编 ...
随机推荐
- 前端javascript之BOM、DOM操作、事件
BOM与DOM操作 BOM 浏览器对象模型>>>:使用js操作浏览器 DOM 文档对象模型>>>:使用js操作前端页面 window对象 所有浏览器都支持 wind ...
- Java学习day4
今天学习了String以及StringBuider 其中较为重点的除了用法以外,还有,String对象以""方式给出的字符串,只要字符序列相同(即顺序和大小写)无论在代码中重复几次 ...
- Java学习day2
今天学习了Java的数据类型.运算符.选择循环结构以及数组. Java所有的关键字全部小写 Java的数据类型与c语言相似,但是c语言定义数组时可以不主动对其初始化,而Java则必须先初始化,有动态和 ...
- el-table高度问题
1. 外层容器flex=1,el-table设置属性height="calc(100% - 60px),有时一刷新页面表格高度无限增加,滚动条一直变短 试验过几次后发现是因为el-table ...
- transition 动画过渡
1. html 结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- python基础练习题(题目 打印出杨辉三角形前十行。)
day38 --------------------------------------------------------------- 实例061:杨辉三角 题目 打印出杨辉三角形前十行. 分析: ...
- Django/SQL server 配置实现(附下载安装)
连接方案1: conn = pymssql.connect(host='127.0.0.1', port=1433, user='sa', password='password', database= ...
- [题解] 春荔(cut) | 贪心
题目大意 有一个长度为 \(n\) 的非负整数序列 \(a_i\),每次可以选择一段区间减去 \(1\),要求选择的区间长度 \(\in[l,r]\),问最少多少次把每个位置减成 \(0\). 不保证 ...
- 不使用比较和条件判断实现min函数的一种方法
不使用比较和条件判断实现min函数,参数为两个32位无符号int. 面试的时候遇到的题目,感觉很有意思. 搜了一下多数现有的解法都是仅有两种限制之一,即要么仅要求不能使用比较,要么仅要求不能使用条件判 ...
- 2┃音视频直播系统之浏览器中通过 WebRTC 拍照片加滤镜并保存
一.拍照原理 好多人小时候应该都学过,在几张空白的纸上画同一个物体,并让物体之间稍有一些变化,然后连续快速地翻动这几张纸,它就形成了一个小动画,音视频播放器就是利用这样的原理来播放音视频文件的 播放器 ...