69 lines
1.8 KiB
Python
69 lines
1.8 KiB
Python
import socket
|
|
import threading
|
|
import os
|
|
import sys
|
|
import json
|
|
import time
|
|
|
|
|
|
import prot_codec as pc
|
|
import target as tg
|
|
from log import myprint
|
|
from log import log_init
|
|
|
|
|
|
|
|
# 代理服务器端脚本,用于转发端口数据
|
|
|
|
SERVER_PORT = 5345
|
|
|
|
|
|
|
|
|
|
# 定义个函数,使其专门重复处理客户的请求数据(也就是重复接受一个用户的消息并且重复回答,直到用户选择下线)
|
|
def dispose_client_request(tcp_client,tcp_addr):
|
|
myprint(f"客户端:{tcp_addr} 已连接")
|
|
recv_data=bytearray()
|
|
target =tg.tcp_target(tcp_client)
|
|
while True:
|
|
try:
|
|
recv = tcp_client.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()
|
|
|
|
|
|
|
|
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 , tcp_client_address = tcp_server.accept()
|
|
thd = threading.Thread(target = dispose_client_request, args = (tcp_client,tcp_client_address))
|
|
# 设置守护主线程 即如果主线程结束了 那子线程中也都销毁了 防止主线程无法退出
|
|
# thd.setDaemon(True)
|
|
thd.start()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
log_init("proxy_service.log")
|
|
start_service()
|