def OnClick_button_export(self): path = GUIUtility.AskSaveFile("保存隐蔽信道文件", "CSV file(*.csv)") info = list(self.serverPtr.clientMap.values())[self.index].MessagesPool def exportData(fileName: str, Infos: list) -> bool: import csv try: with open(fileName, 'w', newline='') as f: f_csv = csv.writer(f) f_csv.writerow(["IPDs", "Content"]) for i in range(0, len(Infos)): if (isinstance(Infos[i], list)): row = [] for j in range(0, len(Infos[i])): row.append(Infos[i][j]) f_csv.writerow(row) else: f_csv.writerow([Infos[i]]) except Exception as e: Debug.printError(str(e)) return False return True if exportData(path, info): Debug.printInfo("导出成功!") else: Debug.printInfo("导出失败!")
def OnClick_DrawIPDsFile(self): path = GUI.get.GetLineEditText(self, "edit_ipds_file") if not path: Debug.printWarning("无法绘制图像:IPDs文件为空") return def readCSV(filePath, start=0, end=-1) -> list: ans = [] with open(filePath) as f: reader = csv.reader(f) next(reader) next(reader) for row in reader: try: ans.append((float)(row[0])) except ValueError as ve: Debug.printError(str(ve)) return ans ipds = readCSV(path)[0:150000] Debug.printInfo("读取完成,开始排序...") ipds.sort() Debug.printInfo("排序完成") plt.figure(1) plt.plot(x=list(range(len(ipds))), y=ipds, seriesName="IPCTC", rgb=[0, 0, 255], lineWidth=5, xlabel="Times", ylabel="Inter-packet delay", windowTitle="TRCTC信道排序后 IPDs 分布规律") plt.displayAll()
def __init__(self, IP, port): # socket列表 self.socket_list = [] self.IP = IP self.port = port self.clientMap = {} Debug.printInfo("Test Info") Debug.printWarning("Test Warning") Debug.printError("Test Error")
def shutDown(self) -> bool: try: self.s.shutdown(2) self.s.close() Debug.printInfo("Disconnect from Server(ip=" + self.IP + " ,Port=" + str(self.port) + ")") return True except Exception as e: Debug.printInfo(str(e)) return False
def testConnect(self) -> bool: try: self.s = socket.socket() self.s.connect((self.IP, self.port)) Debug.printInfo("connect to Server ip={} port ={}".format( self.IP, self.port)) return True except Exception as e: Debug.printInfo(str(e)) return False
def shutDown(self): try: for clientSocket in self.socket_list: clientSocket.shutdown(2) clientSocket.close() if self.socket_list: self.socket_list.clear() self.clientMap.clear() self.s.shutdown(2) self.s.close() Debug.printInfo("Server Closed") except Exception as e: Debug.printError(str(e))
def run(self) -> bool: try: # 创建socket对象 self.s = socket.socket() # 绑定本地IP和端口 Debug.printInfo("IP=" + self.IP + " Port=" + str(self.port)) self.s.bind((self.IP, self.port)) # 开始监听 self.s.listen() # 循环等待连接 Debug.printInfo("waiting for client to join in...") t = threading.Thread(target=self.waitForClient) t.start() #t.join() except Exception as e: Debug.printError(str(e)) return False return True
def server_target(self, client, addr): try: while True: content = self.rec_from_client(client, addr) Debug.printInfo("received from " + str(addr) + ", content=" + str(content)) if str(content) == 'Fin' or content == None: Debug.printInfo("Finished") self.socket_list.remove(client) client.shutdown(2) client.close() self.clientMap[addr].setStatus( ClientInfo.CLIENT_STATUS_DISCONNECTED) break else: self.clientMap[addr].addMessage(content) except Exception as e: self.socket_list.remove(client) self.clientMap[addr].setStatus(ClientInfo.CLIENT_STATUS_INNERERROR) Debug.printError(str(e))
def waitForClient(self) -> None: while True: client, addr = self.s.accept() if (addr in self.clientMap): info = (ClientInfo)(self.clientMap[addr]) info.clear() else: socket_info_list = (list)(addr) info = ClientInfo((str)(socket_info_list[0]), (int)(socket_info_list[1])) info.setStatus(ClientInfo.CLIENT_STATUS_CONNECTED) self.clientMap[addr] = info Debug.printInfo("connected Client:" + str(client)) # 将客户端加入列表 self.socket_list.append(client) # 为该客户端开辟一个线程 threading.Thread(target=self.server_target, args=( client, addr, )).start()
def OnStart(self): GUI.set.WindowTitle(self,'hahahah') GUI.set.WindowIcon(self,'C:\\Users\\Timor\\Desktop\\testIco.bmp') GUI.set.Width(self,"spinBox1",200) GUI.set.Width(self,"spinBox2",200) Debug.printInfo("finished")
def OnClick_Button(self): qfont = (GUIUtility.AskFont("ask")) Debug.printInfo("famliyName=" + qfont.getFamilyName().stdstr())