Files
tcp_port_tran/server.py

84 lines
2.2 KiB
Python
Raw Normal View History

import socket
import threading
import os
import sys
import json
import time
import prot_codec as pc
import target as tg
# 代理服务器端脚本,用于转发端口数据
SERVER_PORT = 5345
_log_fp=None
def _time():
return '['+time.strftime("%Y-%m-%d %H:%M:%S")+']'
def myprint_dec(func):
def wrapper(*args, **kwargs):
# 在这里添加额外的功能
# print(_time(), str(e),file=_log_fp)
kwargs["file"]=_log_fp
result = func(_time(),*args, **kwargs)
_log_fp.flush()
return result
return wrapper
myprint=myprint_dec(print)
# 定义个函数,使其专门重复处理客户的请求数据(也就是重复接受一个用户的消息并且重复回答,直到用户选择下线)
def dispose_client_request(tcp_client_1,tcp_addr):
myprint(f"客户端:{tcp_addr} 已连接")
recv_data=bytearray()
target =tg.tcp_target(tcp_client_1)
while True:
try:
recv = tcp_client_1.recv(4096)
except Exception as e:
myprint(str(e))
break
if recv:
recv_data+=recv
while True:
start=recv_data.find(b'\xff')
end=recv_data.find(b'\xfe')
if(start==-1 or end ==-1):
break
target.recv_handler(recv_data[start:end+1])
recv_data=recv_data[end+1:]
else:
break
myprint(f"客户端:{tcp_addr} 已下线")
target.close()
tcp_client_1.close()
def start_service():
tcp_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
tcp_server.bind(("",SERVER_PORT))
myprint(f"开始监听 ({SERVER_PORT})")
tcp_server.listen(128)
while True:
tcp_client_1 , tcp_client_address = tcp_server.accept()
thd = threading.Thread(target = dispose_client_request, args = (tcp_client_1,tcp_client_address))
# 设置守护主线程 即如果主线程结束了 那子线程中也都销毁了 防止主线程无法退出
# thd.setDaemon(True)
thd.start()
if __name__ == "__main__":
2024-10-08 20:29:52 +08:00
_log_fp=open("proxy_server.log",mode="w+",encoding="utf-8")
start_service()