You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python新手求助:局域网内跨设备访问VM中HTTP服务器

解决虚拟机中Python HTTP服务器无法被同WiFi移动设备访问的问题

嘿,作为Python和网络入门的新手,遇到这种跨设备访问的问题太正常了!咱们一步步来排查和解决,保证你的手机能顺利访问到虚拟机里的服务器~

1. 先调整虚拟机的网络模式(最关键的一步!)

默认情况下,虚拟机可能用的是NAT模式——这种模式下,虚拟机相当于在主机的“内部网络”里,外部设备(比如你的手机)根本找不到它。你需要改成桥接模式:

  • 打开虚拟机软件(比如VMware/VirtualBox),找到你的虚拟机,进入「设置」->「网络适配器」
  • 选择「桥接模式」,如果是VMware记得勾选「复制物理网络连接状态」,VirtualBox选「接入网线」
  • 重启虚拟机,让新的网络设置生效

2. 修改服务器代码:绑定到所有网络接口

你的代码里如果把socket绑定到127.0.0.1(也就是localhost),那只有虚拟机自己能访问。必须改成绑定0.0.0.0,这样服务器会监听虚拟机上所有可用的网络接口,包括对外的IP。

修改后的完整代码参考:

import socket

MAX_PACKET = 32768

def recv_all(sock):
    r'''Receive everything from `sock`, until the connection is closed.'''
    data = b''
    while True:
        chunk = sock.recv(MAX_PACKET)
        if not chunk:
            break
        data += chunk
    return data

def main():
    # 核心修改:绑定到0.0.0.0,允许所有外部设备访问
    host = '0.0.0.0'
    port = 8000  # 换成你实际使用的端口号

    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 加这个选项避免端口被占用时的报错
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind((host, port))
    server_socket.listen(5)

    print(f"服务器正在 {host}:{port} 监听...")
    print(f"手机端请访问:http://<你的虚拟机IP>:{port}")

    while True:
        client_socket, client_addr = server_socket.accept()
        print(f"收到来自 {client_addr} 的连接")
        
        request = recv_all(client_socket)
        print(f"请求内容:\n{request.decode('utf-8')}")

        # 返回一个简单的HTTP响应
        response = b"HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello from VM Python Server!"
        client_socket.sendall(response)
        client_socket.close()

if __name__ == "__main__":
    main()

3. 获取虚拟机的对外IP地址

在虚拟机的终端里执行命令:

  • Linux/macOS:ifconfig 或者 ip addr,找到类似192.168.x.x的IP(通常在eth0或wlan0接口下)
  • Windows:ipconfig,找到「以太网适配器」或「WLAN」下的IPv4地址

这个IP就是你手机浏览器要输入的地址,比如http://192.168.1.100:8000

4. 关闭/放行虚拟机的防火墙

虚拟机的防火墙可能会挡住外部设备的连接请求:

  • Linux:执行sudo ufw disable临时关闭防火墙,或者sudo ufw allow 8000(替换成你的端口)来放行该端口
  • Windows:打开「Windows Defender防火墙」->「高级设置」->「入站规则」,新建规则允许你的端口通过

5. 最后测试连通性

  1. 先在主机的浏览器里输入虚拟机的IP:端口,确认能访问
  2. 确保手机和主机连接的是同一个WiFi网络
  3. 在手机浏览器里输入同样的IP:端口,应该就能看到服务器返回的响应啦!

内容的提问来源于stack exchange,提问作者Swechchha Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:28:27