From d48d38851bcc41f5d336b91cb6fcb4acb65d621c Mon Sep 17 00:00:00 2001 From: lsy2246 Date: Thu, 11 Apr 2024 01:34:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=99=E5=A5=BD=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E6=8E=A5=E6=94=B6=E5=8F=91=E9=80=81,=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E5=B7=B2=E8=BF=91=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python/test/Cilent/Login.py | 92 +++++++---- python/test/Cilent/Session_server.py | 47 ++++++ python/test/Cilent/__init__.py | 14 ++ .../Cilent/__pycache__/Login.cpython-312.pyc | Bin 10703 -> 12701 bytes .../Session_server.cpython-312.pyc | Bin 0 -> 3543 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 165 -> 976 bytes python/test/StartClient.py | 8 + python/test/main.py | 7 - python/test/test.py | 149 +++++------------- 9 files changed, 167 insertions(+), 150 deletions(-) create mode 100644 python/test/Cilent/Session_server.py create mode 100644 python/test/Cilent/__pycache__/Session_server.cpython-312.pyc create mode 100644 python/test/StartClient.py delete mode 100644 python/test/main.py diff --git a/python/test/Cilent/Login.py b/python/test/Cilent/Login.py index 1544ea4..f42ec33 100644 --- a/python/test/Cilent/Login.py +++ b/python/test/Cilent/Login.py @@ -1,10 +1,12 @@ import wx import threading +import time +from tkinter import messagebox class LoginFrame(wx.Frame): def __init__(self): - wx.Frame.__init__(self, None, id=1001, title='登录', pos=wx.DefaultPosition, size=(400, 300)) + wx.Frame.__init__(self, None, id=1001, title='登录', pos=wx.DefaultPosition, size=(380, 300)) # 创建菜单栏 menu_bar = wx.MenuBar() @@ -16,30 +18,42 @@ class LoginFrame(wx.Frame): # 更多菜单 more_menu = wx.Menu() self.register_id = wx.NewId() - self.retrieve_id = wx.NewId() self.set_server_id = wx.NewId() more_menu.Append(self.register_id, "注册账号") - more_menu.Append(self.retrieve_id, "找回密码") more_menu.Append(self.set_server_id, "服务器设置") menu_bar.Append(more_menu, "更多") self.SetMenuBar(menu_bar) # 创建状态栏 - self.status_bar = self.CreateStatusBar(4) - self.status_bar.SetStatusText("服务器连接:", 0) - self.status_bar.SetStatusText("状态:", 2) + self.status_bar = self.CreateStatusBar(2) + self.server_status = False # 服务器状态 + status_thread = threading.Thread(target=self.update_status_bar(None)) + status_thread.daemon = True + status_thread.start() + + # 启动定时器,每秒钟触发一次 + self.timer = wx.Timer(self) + self.Bind(wx.EVT_TIMER, self.update_status_bar, self.timer) + self.timer.Start(1000) # 设置定时器间隔为1000毫秒(1秒 # 获取菜单点击事件 self.Bind(wx.EVT_MENU, self.click_menu, id=self.register_id) - self.Bind(wx.EVT_MENU, self.click_menu, id=self.retrieve_id) self.Bind(wx.EVT_MENU, self.click_menu, id=self.set_server_id) self.Bind(wx.EVT_MENU_OPEN, self.click_menu_title) # 创建注册面板 - self.panel = RegisterPanel(self) + self.panel = LoginPanel(self) self.panel.Show() + def update_status_bar(self, event): + if self.server_status: + self.status_bar.SetStatusText("服务器\t已连接", 0) + else: + self.status_bar.SetStatusText("服务器\t未连接", 0) + + self.status_bar.SetStatusText("时间\t" + time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()), 1) + def click_menu_title(self, event): menu = event.GetMenu() menu_title = menu.GetTitle() @@ -49,8 +63,6 @@ class LoginFrame(wx.Frame): self.panel.Show() self.Layout() - - # 点击菜单检测 def click_menu(self, event): menu_id = event.GetId() @@ -59,11 +71,6 @@ class LoginFrame(wx.Frame): self.panel = RegisterPanel(self) self.panel.Show() self.Layout() - elif menu_id == self.retrieve_id: - self.panel.Destroy() - self.panel = LoginPanel(self) - self.panel.Show() - self.Layout() elif menu_id == self.set_server_id: self.panel.Destroy() self.panel = LoginPanel(self) @@ -79,7 +86,7 @@ class LoginPanel(wx.Panel): # 顶部盒子,目前只放了软件名 top_box = wx.BoxSizer(wx.VERTICAL) # 使用垂直盒子 - show_title = wx.StaticText(self, label='Lsy chat') + show_title = wx.StaticText(self, label='登录') show_title.SetFont(wx.Font(30, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) top_box.Add(show_title, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 10) main_box.Add(top_box, 0, wx.EXPAND) @@ -91,9 +98,9 @@ class LoginPanel(wx.Panel): account_label = wx.StaticText(self, label=' 账号:') account_label.SetFont(wx.Font(15, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) account_box.Add(account_label, 0, wx.ALIGN_CENTER_VERTICAL) - account_text = wx.TextCtrl(self, size=(300, 30)) - account_text.SetHint('请输入账号') - account_box.Add(account_text, 1, wx.ALIGN_CENTER_VERTICAL) + self.account_text = wx.TextCtrl(self, size=(300, 30)) + self.account_text.SetHint('请输入账号') + account_box.Add(self.account_text, 1, wx.ALIGN_CENTER_VERTICAL) content_box.Add(account_box) # 添加空白控件来增加间距 content_box.Add(wx.StaticText(self, label=''), 0, wx.ALL, 5) @@ -102,9 +109,9 @@ class LoginPanel(wx.Panel): password_label = wx.StaticText(self, label=' 密码:') password_label.SetFont(wx.Font(15, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) password_box.Add(password_label, 0, wx.ALIGN_CENTER_VERTICAL) - password_text = wx.TextCtrl(self, size=(300, 30)) - password_text.SetHint('请输入密码') - password_box.Add(password_text, 1, wx.ALIGN_CENTER_VERTICAL) + self.password_text = wx.TextCtrl(self, size=(300, 30)) + self.password_text.SetHint('请输入密码') + password_box.Add(self.password_text, 1, wx.ALIGN_CENTER_VERTICAL) content_box.Add(password_box) main_box.Add(content_box, 0, wx.EXPAND) @@ -122,33 +129,56 @@ class LoginPanel(wx.Panel): self.SetSizer(main_box) + + class RegisterPanel(wx.Panel): def __init__(self, parent): super().__init__(parent) + # 主盒子 main_box = wx.BoxSizer(wx.VERTICAL) - # 内容盒子,放账号和密码 + + # 顶部盒子,目前只放了软件名 + top_box = wx.BoxSizer(wx.VERTICAL) # 使用垂直盒子 + show_title = wx.StaticText(self, label='注册') + show_title.SetFont(wx.Font(30, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) + top_box.Add(show_title, 1, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 10) + main_box.Add(top_box, 0, wx.EXPAND) + + # 中部盒子,放账号和密码 content_box = wx.BoxSizer(wx.VERTICAL) # 账号 account_box = wx.BoxSizer(wx.HORIZONTAL) - account_label = wx.StaticText(self, label=' 账号:') + account_label = wx.StaticText(self, label=' 用户名:') account_label.SetFont(wx.Font(15, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) account_box.Add(account_label, 0, wx.ALIGN_CENTER_VERTICAL) - account_text = wx.TextCtrl(self, size=(300, 30)) - account_text.SetHint('请输入账号') - account_box.Add(account_text, 1, wx.ALIGN_CENTER_VERTICAL) + self.account_text = wx.TextCtrl(self, size=(300, 30)) + self.account_text.SetHint('请输入用户名') + account_box.Add(self.account_text, 1, wx.ALIGN_CENTER_VERTICAL) content_box.Add(account_box) # 添加空白控件来增加间距 content_box.Add(wx.StaticText(self, label=''), 0, wx.ALL, 5) # 密码 password_box = wx.BoxSizer(wx.HORIZONTAL) - password_label = wx.StaticText(self, label=' 密码:') + password_label = wx.StaticText(self, label=' 密码: ') password_label.SetFont(wx.Font(15, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) password_box.Add(password_label, 0, wx.ALIGN_CENTER_VERTICAL) - password_text = wx.TextCtrl(self, size=(300, 30)) - password_text.SetHint('请输入密码') - password_box.Add(password_text, 1, wx.ALIGN_CENTER_VERTICAL) + self.password_text = wx.TextCtrl(self, size=(300, 30)) + self.password_text.SetHint('请输入密码') + password_box.Add(self.password_text, 1, wx.ALIGN_CENTER_VERTICAL) content_box.Add(password_box) main_box.Add(content_box, 0, wx.EXPAND) + # 底部盒子 + bottom_box = wx.BoxSizer(wx.VERTICAL) + # 登录按钮 + register_box = wx.BoxSizer(wx.VERTICAL) # 使用垂直盒子布局 + login_label = wx.Button(self, size=(200, 50), label='确认') + register_box.AddStretchSpacer() # 添加一个可伸缩的空间,将登录按钮推到垂直中间 + register_box.Add(login_label, 0, wx.ALIGN_CENTER_HORIZONTAL) # 将登录按钮添加到垂直盒子中 + register_box.AddStretchSpacer() # 再次添加一个可伸缩的空间,将登录按钮推到垂直中间 + bottom_box.Add(register_box, 1, + wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL) # 将垂直盒子添加到底部盒子中,设置垂直和水平居中对齐 + main_box.Add(bottom_box, 1, wx.EXPAND) # 将底部盒子添加到主盒子中,使其填满剩余空间 + self.SetSizer(main_box) diff --git a/python/test/Cilent/Session_server.py b/python/test/Cilent/Session_server.py new file mode 100644 index 0000000..11ba85a --- /dev/null +++ b/python/test/Cilent/Session_server.py @@ -0,0 +1,47 @@ +import string +import time +import socket +from threading import Thread +import random +import json + + +class Session_server: + def __init__(self, ip_socker, port_socker): + self.ip_socker = ip_socker + self.port_socker = port_socker + self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + self.server_status = False # 服务器状态 + + def Link_server(self): + Verification_code = "" + for _ in range(20): + if random.choice([True, False]): + Verification_code += str(random.randint(0, 9)) + else: + Verification_code += random.choice(string.ascii_letters) + data = {"genre": "test", "source": "Link_server", "data": Verification_code, + "datetime": time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} + data_json = json.dumps(data) + self.server_socket.sendto(data_json.encode("utf-8"), (self.ip_socker, self.port_socker)) + receive_content_json = self.server_socket.recv(1024).decode('utf-8') + receive_content = json.loads(receive_content_json) + if receive_content["data"] == Verification_code: + self.server_status = True # 服务器状态 + Receive_server_Thread = Thread(target=self.Receive_server) + Receive_server_Thread.daemon = True + Receive_server_Thread.start() + + + def Receive_server(self): + while self.server_status: + receive_content_json = self.server_socket.recv(1024).decode('utf-8') # 追加接收到的数据 + receive_content = json.loads(receive_content_json) + print(receive_content) + + def Send_server(self, genre, source, content): + if self.server_status: + data = {"genre": genre, "source": source, "data": content, + "datetime": time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())} + data_json = json.dumps(data) + self.server_socket.sendto(data_json.encode("utf-8"), (self.ip_socker, self.port_socker)) diff --git a/python/test/Cilent/__init__.py b/python/test/Cilent/__init__.py index 28334c2..ec0fe5b 100644 --- a/python/test/Cilent/__init__.py +++ b/python/test/Cilent/__init__.py @@ -1 +1,15 @@ from .Login import * +from .Session_server import * + + +class Client_main(LoginFrame, Session_server): + def __init__(self, ip_socker, port_socker): + Session_server.__init__(self, ip_socker, port_socker) + LoginFrame.__init__(self) + Session_server.Link_server(self) + + # 主页按键绑定 + + def Sign_Account(self, event): + if self.GetParent().server_status: + pass diff --git a/python/test/Cilent/__pycache__/Login.cpython-312.pyc b/python/test/Cilent/__pycache__/Login.cpython-312.pyc index 27b0ee7a6a27d97576387b6076a38fca5c466219..b925acc996bbd002123f0ce20c483fc62d49bffa 100644 GIT binary patch delta 3958 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 R24L+_{b2p)46y1l{{n-=0%ZUI delta 2946 zcmc(geN0=|6~N#1`|$I}voX&$wrgxY9gLR{l58U^p)E-R$x@nzw(96w&%rOj)WPif zu?%9CQe{)9v?k6`Mbd5={UZ|yq^8QW?nCP~Y0@fHRYONbWHc?6MgrPDX%n=r+O*yC z48-j||J#+`@7;IKz2~0u?m72fxzbTL5rO?WCD|k8e9u_;dY%_=@AX7#H8j8X>E@*Orr7%F4WbF zTyJEpb0?JlTUZztq9Q~{4Jp66pFB(8c~g{FVb(NEczC_mE#$a8u ziqi>~b~D*lTI#y`-b z>r-=FN%Wo#>G_xks_zT=hqmeVG$c0d~uq#4LIN!*Wv?JsD9CW{#x>_R+*~ZA(0!8c6B!IL4FxDg0K> zK!c?X4p|;)knLxkDXl||bTBcT8PcNyt;bK1MLWQvJFX23 z6|Bg(p3>8r5keJf6gP`jGmP8^_q#lB$sv&#Ty`XajZE0PwyUhmahPHF+{u|BtVFJM zI$tDw&Xj|)hzFi=ehCs~C)=zAu|w1MC#jc>r06Z(f~Y~Di*zfZ0?~xq&FNoUh?Mr2*b?Y=;?FhZ)`Lic0VoSN%TR2O|g?X1!^S zqOuqo?iEFd?8%lhoaR0<)rx_S4iK{#xZ^7m1I6J2WXjt}6P&a9-McIt_Y#@lbT+=& z#+_Fe%Wv?~sGO7g>#=U(lSmDbp?TBai3OS)HuKh;6%q}vvM+W9umi*8e?l6y0VtiZ2hy}Ugsz+7Deyd`?!>7cVw?HZ8}W{0bK`x5#zDTwLB5iPwEVzI2?fwY2$ ztx+?pkPo^)hlNA$XP73`#$KyVhUM4ZSbh_hzI}Q5M?YLT`$mCV!GE|4bHS?3QPav> z>|n9_C^a_50shM0n9Z!;0UOo#Wv0k}XaYXmE{x23 zTH*JbC*Vf-;T;wJiIe%0lRKtT^A#;;?AK-Yf*hQagV!pz%*##JWfe>Gf_*YETfPu| za4!1byxb0hRTsYC3;e)#(KfkvYIxqa^Ney`_AJPib8_XiP}97;)v)86lYJK|r^xKK zh1j0C*q(WLFMQDSd3e4Wj$k@Yixjh&wjg#Q(EoxGkN2io(7jqZ9gnl$pJCE0?$HCq zD2*aP96$x$As?US{%mRzt8Q})#oTQ&a<|6F-Iv)eeI|FUuvk6~e|3l8j7NoxYEc9o z_tI$ncF5Oz;APb=iaD|031gcoVOdpSQB}a|Z3d^uM!e7*spo}$cB^?+US!!e#;jct ztZ>$AgT|oh&awM?K~V8?gLS zG;T-9FjH|IkxvS`0C{ha{WpcMGsLUHGeO5GrHi&Rm+5ZA9t1`}_aYub>_a?&=s8R50OIjBc4SVX^cn7y}B(eTkpMFR%O@hM(KWw&B(q@Sn1aBfAsob z|CZSQsdB4M-C(z~GOnEKdtVM0%WM!Mqv&Euf!3f9F^Y#6G9d_ v%OY2HS869DaISp9m-pS}uz&Y}X)CE(m$2^Lqok4v+9x{movR${8s7Z_9LmMe diff --git a/python/test/Cilent/__pycache__/Session_server.cpython-312.pyc b/python/test/Cilent/__pycache__/Session_server.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8fec5a73835afc35ae4e8b784dd2de60216c60a GIT binary patch literal 3543 zcmai1Z%i9U7N50u{Rc1qdL#uGY=be0Nka~rkdzd191xlwkP4#oilBRrXCZcs&CM=3 z5t-^feoAs?qkZ<-5a6Z9as4paa(UDziTY%x#1b<}zsB>bZH& z9J}US(7Q736@H%QES)efm^#nA$Au;lcHcypzwffF&3o6mxbTDyX5yUTxpbAt37oW) z7Uimg{cd1xBNQ&*hP1tMe`xF^@wJIsO(GqjFnUfxp#IeyOLx@Az6P9nr1D&BX_UpN`xc z`C?E%JEfhSDs@a#Ww6`+xv?Ms0H-LiRw|AsJvP~7Ox<* z;Zp7Ef8I4>H|Ce^H6)tnRC+FEt6BM+OT+^9u#03qZ`6ZF?$$6^`9-g)nP}8WTC{xC z(gW5okFXc}z-A+xm2P63(_?>){sl+QxcgOx?HSj7z;C$KLrkAO%s8jdyV+hg_&iFt zIvU2MUt*lo=lOJpGh!SLFk4_L#H3CS(ugx++>(p!mqS0ZgD9Kp^jKuR(lJNMIAiuf&9S$S$5xKVa3uEn zP;7cAHg}IVgk?EPWCJi`jU;7*r#Wu;fXZrWMSd!*sY}PtJVAhHq#f*1C{`0>Sytn1 zhCmY8WmpRx&aD`pS;SqeW6JQ+NZlh+LomZ{tjGPwj+2xJ-} zG|7yHSve`EuFKUUfQbotg&J4jBh` zX+Hcu`CHo_;{6x6!f2)O(0dzy*|>x6PTX1CX*^bL>ilT#!QoFs_d?s;c7G{8T#Aio zP4L_KFHl|nc=5x<&j$5ZCbd^4OR?9rCiv~#^;2WJbtoA5WVra-xk`IvYkG6K*gO1% z`sKTyzgs$YvDE(NPj0ShmMic-wzS@Ub{`n3+ld3&DVK1u6GS+ zT>}qKm%7ew<1e$HXTQbz%sbl5JH=sX$M=VFII4&HwQ#>49@N5v57komH9b70g~z^{ zEQP0vzV=EmwAH)WTa3M03Jw(-%YopXK`qc#>^c1?aJt+XD~#`mp-Ok}!)|?GLK~Ra z={{c+JIlvT0NoLfmc>q8Jfew59*gl^KN8Q7W;nxV3IvS``nUfbklPeCpg-8i??GOD zht%rQc13oim}AMCwu?iJ)-E4Vh-hA#Ep0FyY-d{ z1MV3T205Yd8TVQ_K$C}@pybz-P#hu@Pz+%ea#D@E&G;v0sQgtRtlC=vIslRz9R~vR z+34=3i!K6z7;Sh#Z-_i7~SsikB&8hRbov^-*F!0^=SlPJ&cQi@M>h zVxS3<$YDt|IvYpX;v`OMb+jNndZmnkj9MZ@~Q7NYp)|@0%Y`c it3-k9x;c*f9@T%30zm(X+AaP+o*qu-_7J6}k^cg?3eBVd literal 0 HcmV?d00001 diff --git a/python/test/Cilent/__pycache__/__init__.cpython-312.pyc b/python/test/Cilent/__pycache__/__init__.cpython-312.pyc index b422f26ef9cd103ccebd3a7f5a9373e29fcee968..74814e935bba5975fee13464b47d20b01c30d0bc 100644 GIT binary patch literal 976 zcmZ`&zfTlF6n?XNivxSd4}%1~7)~k|6JlXSl*B+JCWM&KT`rkyb_d+!*ga?FNS0hd zK}@W)J4#x-nD}oPD-;9STxVrRJZ-3)x4Q?|IK`W9-uu2cZ{M5!S}Ki!UN67QY<(mE zKk+bFBRS|l)}RAE_@n`!43Z&&$bdEQjYIHFZgA2qWQwX87aZ%C&Ib-j$by$AN;mZ4 z>d$J^0S;B-L)GxfAyiGwRV~D(Q%LNUM!-YGcHJQK%v6#YOK*7YztyG#D)VYvA7~3D3X5Qqzbq%jU8*Z2}oRAG&@%Sc}GKfMZx!B_(p^OD#pcqTW z)}!qpd?DOjp4jU_xRX;HGbu>k*h)r&CXM{s`;*RYhL8@ zS~FI!qp+s9RJE0$p}SNYT(#JY#i$nTPY<(Sfiw0ug-N2_P_K^mVwrSr#6e$a<~tpU$Kn=i!a6qYpTKpX0V!44RD@8-BZtjv9a z#1MnP-a1Ayy2jNjSLjbkN?H4uRIX}C#}GwLNi4pngAx-}Dq;d%#m!(lWY0Y>YK3Zl zcKCybBPGq1_p~{H3wz@I^1J2lcKO_PzS+)2aq`lH;)0me;SI;ak%f9lI5Ng|Bfr%^ zTx9G`%WY(lw7uev7Mwt;ON$ZsDpP|%V#$Z_+b}JsKW&`eB$gz`B