From 929061e4b53df703bf96cc6932f81858905a0629 Mon Sep 17 00:00:00 2001 From: milk <53408947@qq.com> Date: Fri, 31 Oct 2025 19:41:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=A3=80=E6=B5=8B=E6=8A=95?= =?UTF-8?q?=E5=B1=8F=E7=AB=AF=E5=8F=A3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Module/DeviceInfo.py | 39 +++++++++++------- Module/Main.py | 2 +- Module/__pycache__/DeviceInfo.cpython-312.pyc | Bin 30163 -> 30541 bytes Utils/LogManager.py | 2 +- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/Module/DeviceInfo.py b/Module/DeviceInfo.py index 7a8ba1f..e4ee4f3 100644 --- a/Module/DeviceInfo.py +++ b/Module/DeviceInfo.py @@ -119,31 +119,42 @@ class DeviceInfo: threading.Thread(target=self.check_iproxy_ports).start() - - # =============== 核心:端口连通性检测 ================= - def _is_local_port_open(self, port: int,udid:str, timeout: float = 5) -> bool: - print("开始监听剪口") + # =============== 核心:端口连通性检测(HTTP 方式) ================= + def _is_local_port_open(self, port: int, udid: str, timeout: float = 5) -> bool: + print("开始HTTP方式检测端口") """ - Windows: 尝试连接 127.0.0.1:port,能连上即认为端口可用(iproxy 正在监听/转发)。 - 不抛异常,返回 True/False。 + 使用 HTTP 方式检测:向 http://127.0.0.1:port/ 发送一次 HEAD 请求。 + 只要建立连接并收到合法的 HTTP 响应(任意 1xx~5xx 状态码),即认为 HTTP 可达。 + 遇到连接失败、超时、协议不对等异常,视为不可用。 """ if not isinstance(port, int) or port <= 0 or port > 65535: - LogManager.error("端口不可用",udid=udid) + LogManager.error("端口不可用(非法端口号)", udid=udid) return False try: - print("尝试监听") - # create_connection 会在连接成功时立即返回 socket - with socket.create_connection(("127.0.0.1", int(port)), timeout=timeout): - print("端口正常") + # HEAD 更轻;若后端对 HEAD 不友好,可改为 "GET", "/" + conn = http.client.HTTPConnection("127.0.0.1", int(port), timeout=timeout) + conn.request("HEAD", "/") + resp = conn.getresponse() + status = resp.status + # 读到响应即可关闭 + conn.close() + # 任何合法 HTTP 状态码都说明“HTTP 服务在监听且可交互”,包括 404/401/403/5xx + if 100 <= status <= 599: + print(f"HTTP端口正常,status={status}") return True - except OSError: - LogManager.error("端口不可用",udid=udid) + else: + LogManager.error(f"HTTP状态码异常: {status}", udid=udid) + return False + + except Exception as e: + # 连接被拒绝、超时、不是HTTP协议正确响应(比如返回了非HTTP的字节流)都会到这里 + LogManager.error(f"HTTP检测失败:{e}", udid=udid) return False # =============== 一轮检查:发现不通就移除 ================= def check_iproxy_ports(self, connect_timeout: float = 3) -> None: - time.sleep(60) + time.sleep(20) print("开始监听投屏端口") while True: snapshot = list(self._models.items()) # [(deviceId, DeviceModel), ...] diff --git a/Module/Main.py b/Module/Main.py index 11b32b7..92de576 100644 --- a/Module/Main.py +++ b/Module/Main.py @@ -50,7 +50,7 @@ if __name__ == "__main__": # 清空日志 LogManager.clearLogs() - # main(sys.argv) + main(sys.argv) # 添加iOS开发包到电脑上 deployer = DevDiskImageDeployer(verbose=True) diff --git a/Module/__pycache__/DeviceInfo.cpython-312.pyc b/Module/__pycache__/DeviceInfo.cpython-312.pyc index 6bf4488d9896597a2b8ded66f4a7f5ffc46824d1..7460619fec86cb218b31d2066d8ad8923b1a5d48 100644 GIT binary patch delta 2489 zcmZve4^)%a6~Mpu{;Er-=}A^ryuA1 zzWd#G-+lMpd*2I#pOee~AW0u5CMIy~$vPr;xt~3ibTo~BfQPebdr1O3W6I#`bkLt= zn6DBPXoXLZ^pJa!?6|r|Cdtk6puBE2+UhipgdSef5-unQqMi$z9@S(jf{MDil71$e zm274z%-(ETK{&^(pwiCojO_@3k83FpxX_m<^2M`BR-%ZE zz<6X-aK@8JiK4jw{*oj&Q3zjhgWVzXI zxHlq28-L@}XR6b0PDXxdO@!CdA5g~RTLqy3l=+KGl#)04Ae%uSVX&&{dX&=<&mpAn z>|T#2CZ|qc1Kq*2G2-;8+1tz>m`;B@{YCcS`;sBVT~Q}SlO7&Y=S}f)jrPj~cse7e zW%Z@pVQtx{!8j#1Xwt?EsRxQ*EgmuC4H)ve>my71g!4t0YNLj{LBn&cC8Jt>$A-2I zucdSvhP3lW4XGmr%YeZ$Xqd;wlG6@UzFOJ3_9`=4-?qMe!&Tj!S89fImQLBQ&T>Vc z95oj77WOWPrW6n9SB$2nkLgV#Eqe2S-W;_&)|b+!j^;dhNj|LKIGUPqdrW7X=431) zZOVu?V?dh`%`WK8@3llT3;W84wX3cej9*Qun86)iHrri4w@R@(hkIXXLgr{nl4S2M zG?i#%f6yqH9MfT*oOYo~aBXvX{eu18;Rxqtmhxn7IGAlAqzO9BX7VERn-?f(fO&-p zb0Ikxw&Yw>kzJs$o+BZ+VBI`_HyfkRAYNv$CWxhp$^5<_$A}}Q^m^PbkCO)AiG>Bm zeaxb1c8PO`%kKQ1r^dU;?eYmu&-rlM!U=^!EE+T~Y1>FC`tuL__-5dV~EM^UWb#m;dcPuDock8`8IMR z{NMb5n!E*#%g-y(iGLoH)fiz@aVB{QJjEum7ut#^*~SAa-Ysfn20kqV_SgM~rlHII z3{5FB_F1*X;iz(m`z9ppwH;8Jb}<`vFz?mqR-tU9en zxDmfbbRpItb|BtByb117lkztx9)6Sp59!YP?XaJe`KWJl{axfz_2kauY6A z+7{l%*+iiKMpyq~5O1UEY7AlJN-2mxGIdifBv$5<)8P#-czESmw7v!xf3zn(#6+u7 z+KPDBiPs!2c>Qtz5HBj%)zyu4>hkYF4Ms*0Zn<)*d0`YgplOlds^I>!D?0^FPieNjv&xaWSwa{mk|1U2gYnP}kiet#Gh5 zEv&6yMy%&?IyR_PCZ$12)rz5KSFHXk5HOMU`J3fxp=1O zES4IoM~L~yJc?PTvrxJW2ev;*Zozxosl}Y7Nb8nOaqQK*RD4}b7GIZyf1&c9t4R3! z^c6y8!F8W4IR$<8pcC=j{T`(WctkjzJc%Oyu+x0RGQ<-2T6mZg!$baG=*m>YHq9Za Hk&XQi8cNBN delta 2133 zcmZXU4Nz276vy9v%PzaPe93?;ABu}#s{(?OqC&)=W}0H71}VX|`(#&_Wx4My2r@`A zQ#t8~b0Ra+EHY6s(3gg}mO5kOSEWgVu4Wk$ex!k#&gc}~^HxTxw==(Y-v6F+?#DTI zzr91w-y%V$0|Ns%_VhSacI!)fgLWAB3*k)E@IkDw;n@Vw_I)8QZn-J-kY%zpsVuvBOsk`}b!>@%7=?FEQ3pF)O^QhXg59!X1%{nowJ#=9&#|Oq-4hgSwwug+oFeLh+nteY+ zQ5kuBU&DnAxy$jGDxyOlb50*~Hr6-CMK*_;4LlMju;m=(60(B1qhk^Rvs9|1Q?=~l zm`a_c_dljpp{-XK9G8`%I+jebQsiAjZ9JJShYgP>#08U$aikP-jbk7)HXJq?N05!O z$9UDBNU(M6K~e^}LD)QF&9fC~o<`st^bCVZJz!hasGdjEFo<{wEoLnALwLl~%znp}QHBJNfi9Pr&HKBM8WI7Z>uHuh3~5?8}`( zYT;IH%HTsNco@9uWsVZFL=Qt!-cZ)T^YYTjR{5>GVLZ7BO-mZI_n4E3r@b&|sf)CL zXK59=4r%%6BOhWkk?5b8>H&kOWhgAfC1hs$N_r9+@=au?d_3RDYYw2}FOXKahIN>y z&=8HQreiQt!+>%9t7tH7$@DbauS}|p9N0^u%Utd(u)Ao<%8HZnJ|TqH{KTBx5wLf9q$-a744p-@ zW^7{;>t76~fd~tt6Vbu&uQDhL!`A*!8BRfoEtXt`^|m+3d2l!ka-#hWLjHpN%N^tq z7*~v&q+Ey$%v$sRc$}y*WZ>FY*d31B@cN3Iq*``3UL?DCp-wQdZL5Ju8E9ErOz;BS?MM1do0>S=mD5b z)5smDr3r;DCQ$)_|9P|(u@12caRi|>?g_Md5hoGK0jkjoz#0Z4lruhs8g7^lLY#pR zaTK`$lSOJY4ptkQR6QJfwT3CLHn;LRvG5*>y<_DwVjUp?knc_p566^^m_xaBN71?k mE$+|5@1PllNJdOTB*DtE@nkA&FWVfP?N8G0a!4A<#{L2R)LU@? diff --git a/Utils/LogManager.py b/Utils/LogManager.py index 0c8bb94..3981133 100644 --- a/Utils/LogManager.py +++ b/Utils/LogManager.py @@ -26,7 +26,7 @@ def _force_utf8_everywhere(): except Exception: pass -# _force_utf8_everywhere() +_force_utf8_everywhere() class LogManager: """