修复多网络请求只根据本机内网ip所在网络搜索设备
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1 +1,3 @@
|
||||
/.idea
|
||||
/build
|
||||
/.venv
|
||||
|
||||
@@ -30,21 +30,18 @@ class DeviceDiscovery:
|
||||
Returns:
|
||||
list: 发现的设备列表
|
||||
"""
|
||||
# 首先检查网络连接
|
||||
try:
|
||||
test_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
test_sock.settimeout(1)
|
||||
test_sock.sendto(b'test', ('239.255.255.250', 1900))
|
||||
test_sock.recvfrom(1024)
|
||||
test_sock.close()
|
||||
except socket.timeout:
|
||||
self.logger.warning("网络可能没有响应,检查防火墙设置")
|
||||
except Exception as e:
|
||||
self.logger.warning(f"网络测试异常: {e}")
|
||||
|
||||
devices_by_uuid = {} # 用UUID去重
|
||||
pending_devices = {} # 待处理的设备,key为location,value为(ip, headers)
|
||||
|
||||
# 获取本机IP
|
||||
try:
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s.connect(("8.8.8.8", 80))
|
||||
local_ip = s.getsockname()[0]
|
||||
s.close()
|
||||
except:
|
||||
local_ip = "获取失败"
|
||||
|
||||
# SSDP 发现消息
|
||||
ssdp_msg = (
|
||||
"M-SEARCH * HTTP/1.1\r\n"
|
||||
@@ -60,7 +57,8 @@ class DeviceDiscovery:
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
||||
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
|
||||
sock.bind(('0.0.0.0', 0))
|
||||
# 绑定本机ip
|
||||
sock.bind((local_ip, 0))
|
||||
|
||||
# 发送发现请求
|
||||
sock.sendto(ssdp_msg.encode(), ('239.255.255.250', 1900))
|
||||
|
||||
@@ -441,7 +441,7 @@ class StreamingFileServer:
|
||||
self.httpd: Optional[StreamingHTTPServer] = None
|
||||
self.server_thread: Optional[threading.Thread] = None
|
||||
self.is_running = False
|
||||
self.logger = AppLogger.create_default_logger('StreamingFileServer')
|
||||
self.logger = AppLogger('StreamingFileServer')
|
||||
|
||||
# 初始化MIME类型
|
||||
mimetypes.init()
|
||||
|
||||
@@ -808,7 +808,7 @@ class MainWindow(QMainWindow):
|
||||
# # 自动滚动到底部
|
||||
# scrollbar = self.log_text.verticalScrollBar()
|
||||
# scrollbar.setValue(scrollbar.maximum())
|
||||
|
||||
self.logger.info(message)
|
||||
# 同时输出到状态栏
|
||||
if level == "error":
|
||||
self.statusBar().showMessage(f"错误: {message}", 1000)
|
||||
|
||||
Reference in New Issue
Block a user