# import socket # import threading # import aacecontrol # import ctypes,win32con,win32gui,sys,json # import logging # # import file_script # IpAddress = '127.0.0.1' # FilePath = 'D:\\MegaSoft\\Scripts' # Port = 2016 # # device = md.MultiWinDevice("multiWin") # device = aacecontrol.AppService() # # 定义互斥量名称 # mutex_name = "aaca_mutex" # def handle_client(client_socket,addr): # device.loginformation(f'监听{addr}的数据') # while True: # try: # # 接收客户端发送的数据 # data = client_socket.recv(2048) # if not data: # device.loginformation(f'{addr}-接收到空数据') # break # # # 处理接收到的数据 # # device.loginformation(f"Received from {client_socket.getpeername()}: {data.decode('utf-8')}") # datadecode = data.decode('utf-8') # command = datadecode.partition(':')[0] # 只分割一次 # paras = datadecode.partition(':')[2] # result = -1 # if 'makeGraph' in command: # command = 'makeGraph' # device.loginformation(f'---收到制图指令 {datadecode}---') # result = device.click_create_table(paras) # elif 'operate' in command: # command = 'operate' # device.loginformation(f'---收到创建任务指令 {datadecode}---') # result = device.start(paras) # elif 'createTask' in command: # command = 'createTask' # device.loginformation(f'---收到制图创建任务命令 {datadecode}---') # result = device.create(paras) # elif 'start' in command: # command = 'start' # device.loginformation(f'---收到启动命令 {datadecode}---') # result = device.run(paras) # elif 'status' in command: # device.loginformation(f'---收到查询状态命令 {datadecode}---') # result = 2 # if device.is_finished(): # result = 1 # else: # command = '未知命令' # device.loginformation('---未知命令---') # reponse_txt = command + ':' + str(result) + '\n' # client_socket.send(reponse_txt.encode('utf-8')) # device.loginformation(f'---返回-{reponse_txt}---') # except: # device.loginformation(f'{addr}-接收数据异常') # client_socket.close() # return # # 关闭连接 # device.loginformation(f'{addr}-连接断开') # client_socket.close() # def start_server(): # server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # server.bind((IpAddress, Port)) # server.listen(20) # device.loginformation(f"Server listening on port {IpAddress}:{Port}...") # try: # while True: # client_socket, addr = server.accept() # device.loginformation(f"Accepted connection from {addr}") # # 启动一个新线程来处理客户端请求 # client_handler = threading.Thread(target=handle_client, args=(client_socket,addr)) # client_handler.start() # except: # print('服务结束了。。。') # finally: # ctypes.windll.kernel32.CloseHandle(mutex) # def message_box(title, message, type=win32con.MB_OK): # """ # 弹出一个消息框 # :param title: 消息框的标题 # :param message: 消息框显示的消息 # :param type: 消息框的类型,例如MB_OK, MB_ICONERROR等 # :return: 用户点击的消息框按钮的标识符 # """ # return win32gui.MessageBox(None, message, title, type) # if __name__ == "__main__": # # 定义互斥锁名称,可以是任意字符串 # mutex = ctypes.windll.kernel32.CreateMutexW(None, False, mutex_name) # # 检查互斥量是否已经存在 # if ctypes.windll.kernel32.GetLastError() == 183: # ERROR_ALREADY_EXISTS # message_box("提醒", "脚本正在运行中,请点击确定关闭。", win32con.MB_ICONWARNING) # sys.exit(0) # ctypes.windll.kernel32.SetThreadExecutionState(0x80000002) # 确保桌面不息屏 # server_thread = threading.Thread(target=start_server) # server_thread.start() # # w = file_script.Watcher(FilePath) # # file_thread = threading.Thread(target=w.run) # # file_thread.start() import ctypes import socket import sys import threading import win32con import win32gui from file_script import Watcher import aacecontrol IpAddress = '127.0.0.1' FilePath = 'D:\\MegaSoft\\Scripts' Port = 2016 device = aacecontrol.AppService() # 定义互斥量名称 mutex_name = "aaca_mutex" def handle_client(client, addr): while True: try: data = client.recv(2048) if not data: device.loginformation("接收数据异常") break datadecode = data.decode('utf-8') device.loginformation(f"接收到---{client.getpeername()}---数据---{datadecode}") result = -1 command = datadecode.partition(':')[0] # 只分割一次 paras = datadecode.partition(':')[2] # 返回包含分隔符 # if 'makeGraph' in command: # command = 'makeGraph' # device.loginformation(f'---收到制图指令 {datadecode}---') # result = device.click_create_table(paras) # elif 'operate' in command: # command = 'operate' # device.loginformation(f'---收到创建任务指令 {datadecode}---') # result = device.start(paras) if 'createTask' in command: command = 'createTask' device.loginformation(f'收到创建任务并执行命令 {datadecode}') result = device.createThenStart(paras) # elif 'start' in command: # command = 'start' # device.loginformation(f'---收到启动命令 {datadecode}---') # result = device.run(paras) elif 'status' in command: device.loginformation(f'收到查询状态命令 {datadecode}') result = 2 if device.is_finished(): result = 0 else: command = '未知命令' device.loginformation('未知命令') response_txt = command + ':' + str(result) + '\n' device.loginformation(f'返回:{command}:{str(result)}') client.send(response_txt.encode('utf-8')) except: device.loginformation(f'{addr}通讯异常') break # 关闭连接 device.loginformation(f'关闭{addr}连接') client.close() def message_box(title, message, type=win32con.MB_OK): """ 弹出一个消息框 :param title: 消息框的标题 :param message: 消息框显示的消息 :param type: 消息框的类型,例如MB_OK, MB_ICONERROR等 :return: 用户点击的消息框按钮的标识符 """ return win32gui.MessageBox(None, message, title, type) class TCPThread(threading.Thread): def run(self): server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((IpAddress, Port)) server.listen(20) device.loginformation(f"服务端---{IpAddress}---{Port}---启动") connected_clients = 0 try: while True: client, addr = server.accept() connected_clients = connected_clients + 1 device.loginformation(f"客户端---{addr}---已连接,已连接客户端数量:{connected_clients}") client_handle = threading.Thread(target=handle_client, args=(client,addr)) client_handle.start() except Exception as e: device.loginformation(f"{str(e)}服务端正在关闭...") server.close() device.loginformation("服务端已关闭") finally: # 释放互斥量 ctypes.windll.kernel32.CloseHandle(mutex) if __name__ == "__main__": # 定义互斥锁名称,可以是任意字符串 mutex = ctypes.windll.kernel32.CreateMutexW(None, False, mutex_name) # 检查互斥量是否已经存在 if ctypes.windll.kernel32.GetLastError() == 183: # ERROR_ALREADY_EXISTS message_box("提醒", "脚本正在运行中,请点击确定关闭。", win32con.MB_ICONWARNING) sys.exit(0) ctypes.windll.kernel32.SetThreadExecutionState(0x80000002) tcp_thread = TCPThread() tcp_thread.start() # 创建线程 watcher = Watcher(FilePath) watcher_thread = threading.Thread(target=watcher.run) watcher_thread.start()