Files
tcp_port_tran/target.py

86 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import sys
import json
import socket
import prot_codec as pc
from log import myprint
from log import log_init
# 定义服务器和客户端
# device:
# server
# client
# proxy
# 定义操作类型
# option:
# connect
# disconnect
# data
# login
# close
# 这里是公共变量所有tcp_target对象都可以访问
# 只支持一对一连接
_tcp_server=None
_tcp_client=None
class tcp_target(object):
def __init__(self,tcp_handler:socket):
self.handler=tcp_handler
self.state="idle"
def recv_handler(self,recv_data:bytearray):
global _tcp_client
global _tcp_server
# 解包查看数据类型
cmd,data=pc.decode(recv_data)
myprint(cmd.decode('utf-8'))
j=json.loads(cmd)
if(j["device"]=="client"):
if(j["option"]=="login"):
# 登陆时保存客户端句柄,断开之前的句柄
if(_tcp_client is not None):
_tcp_client.close()
_tcp_client=self.handler
else:
# 其他消息原样发送到服务器端
if(_tcp_server is not None):
_tcp_server.send(recv_data)
if(j["device"]=="server"):
if(j["option"]=="login"):
# 登陆时保存客户端句柄,断开之前的句柄
if(_tcp_server is not None):
_tcp_server.close()
_tcp_server=self.handler
else:
# 其他消息原样发送到客户端
if(_tcp_client is not None):
_tcp_client.send(recv_data)
# 通知服务器和客户端断开连接
# 这里只进行数据的收发处理不执行端口的close操作
def close(self):
cmd={'device':'proxy','option':'close'}
data=pc.encode(json.dumps(cmd).encode('utf-8'),b'default')
# 这里有可能连接已经断开,无法发送
if(_tcp_client is not None):
try:
_tcp_client.send(data)
except Exception as e:
myprint("target_close:",str(e))
if(_tcp_server is not None):
try:
_tcp_server.send(data)
except Exception as e:
myprint("target_close:",str(e))