其中一方断线后,通知另一方断开连接
This commit is contained in:
@@ -23,7 +23,7 @@ _LOCAL_PORT = 31234
|
||||
|
||||
_remote_client=None
|
||||
_local_client=[]
|
||||
|
||||
_local_server=None
|
||||
|
||||
|
||||
# 发送数据到指定ip地址和端口
|
||||
@@ -40,9 +40,15 @@ def send_to(ip,port,data:bytearray):
|
||||
def close(ip,port):
|
||||
for item in _local_client:
|
||||
if(item[1]==ip and item[2]==port):
|
||||
print(f'remote close {ip},{port}')
|
||||
item[0].close()
|
||||
break
|
||||
|
||||
# 关闭所有
|
||||
def close_all():
|
||||
for item in _local_client:
|
||||
item[0].close()
|
||||
print('remote close all')
|
||||
|
||||
|
||||
|
||||
@@ -51,6 +57,7 @@ def close(ip,port):
|
||||
def remote_client_handler(tcp_remote:socket):
|
||||
global _remote_client
|
||||
global _local_client
|
||||
global _local_server
|
||||
print("已连接代理服务器")
|
||||
recv_data=bytearray()
|
||||
cmd={'device':'client','option':'login'}
|
||||
@@ -78,12 +85,18 @@ def remote_client_handler(tcp_remote:socket):
|
||||
send_to(j['ip'],j['port'],data)
|
||||
elif(j['option']=='disconnect'):
|
||||
close(j['ip'],j['port'])
|
||||
elif(j['device']=='proxy'):
|
||||
if(j['option']=='close'):
|
||||
close_all()
|
||||
except Exception as e:
|
||||
print(str(e))
|
||||
recv_data=recv_data[end+1:]
|
||||
else:
|
||||
break
|
||||
tcp_remote.close()
|
||||
print("proxy close")
|
||||
if _local_server is not None:
|
||||
_local_server.close()
|
||||
|
||||
|
||||
# 本地数据处理,解包,把负载数据发送到本地服务器
|
||||
@@ -123,18 +136,23 @@ def local_client_handler(tcp_server:socket,addr):
|
||||
def main():
|
||||
global _remote_client
|
||||
global _local_client
|
||||
global _local_server
|
||||
|
||||
_remote_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
||||
_remote_client.connect(("1.92.113.30",5345))
|
||||
thd = threading.Thread(target = remote_client_handler, args = (_remote_client,))
|
||||
thd.start()
|
||||
tcp_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
||||
tcp_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
|
||||
tcp_server.bind(("",_LOCAL_PORT))
|
||||
_local_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
||||
_local_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
|
||||
_local_server.bind(("",_LOCAL_PORT))
|
||||
print(f"开始监听({_LOCAL_PORT})")
|
||||
tcp_server.listen(128)
|
||||
_local_server.listen(128)
|
||||
while True:
|
||||
temp , temp_address = tcp_server.accept()
|
||||
try:
|
||||
temp , temp_address = _local_server.accept()
|
||||
except Exception as e:
|
||||
print("local server:",str(e))
|
||||
break
|
||||
thd = threading.Thread(target = local_client_handler, args = (temp,temp_address))
|
||||
thd.start()
|
||||
|
||||
|
Reference in New Issue
Block a user