如何用Python低级Socket检测局域网MongoDB服务器响应(无需PyMongo类库)
用Python原生Socket检测MongoDB服务状态的正确方式
你代码的问题所在
报错「[Errno -2] 名称或服务未知」是因为你给socket.connect()传的地址带了mongodb://前缀——Socket只认纯IP/主机名,这个协议前缀会被当成主机名去解析,当然找不到对应的服务。
修正后的可运行代码
只需要去掉协议前缀,用纯IP地址即可。另外建议加上超时设置,避免无响应时程序卡死:
import socket def check_mongodb_alive(host, port=27017, timeout=5): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(timeout) try: # 只传纯IP和端口,不要加mongodb:// sock.connect((host, port)) print(f"✅ {host}:{port} 上的MongoDB服务可连接") return True except socket.error as e: print(f"❌ 连接失败: {str(e)}") return False finally: sock.close() # 测试局域网内的MongoDB服务器 check_mongodb_alive('192.168.1.2')
补充说明
- 这个方法仅验证TCP连接是否能建立,刚好满足你「无需访问文档,只检测服务响应」的需求——只要MongoDB在监听27017端口,就能建立连接,和认证权限无关(认证是MongoDB协议层的步骤,不影响TCP握手)。
- 超时参数可以根据你的局域网环境调整,默认5秒足够应对大多数场景。
内容的提问来源于stack exchange,提问作者Expertcompsci
相关产品推荐
相关产品推荐

