【问题标题】:Can't access localhost site from other device无法从其他设备访问本地主机站点
【发布时间】:2020-10-10 22:10:24
【问题描述】:

我编写了一个简单的程序,它绑定到机器内部 ip 和端口 80,即 http 端口。

import socket
import time as t
from datetime import datetime


def gettime():
    unix_stamp = t.time()
    dt_object = datetime.fromtimestamp(unix_stamp)
    dt_object = str(dt_object).split()
    return dt_object[1], dt_object[0]


HOST = socket.gethostbyname(socket.gethostname())
print(f"[LOG::{gettime()[0]}]   {HOST}")
PORT = 80

index = open("index.html", "r")

MySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
MySocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
MySocket.bind((HOST, PORT))
MySocket.listen(3)


client_socket, (client_ip, client_port) = MySocket.accept()
print(f"[LOG::{gettime()[0]}]   {client_ip}:{client_port}")
client_socket.send(index.read().encode('utf-8'))

client_socket.shutdown(1)

t.sleep(10)

client_socket.close()
print(f'[LOG::{gettime()[0]}]    DONE AND CLOSED')

当我尝试从运行脚本的机器连接到我的网站时,我得到了网站和所有内容。但是当我从我的手机或另一台机器上尝试时,它无法连接到该站点。 我的“服务器端”笔记本电脑有有线连接。手机和另一台机器都无线连接到调制解调器路由器或调制解调器路由器的接入点。

【问题讨论】:

  • 您如何通过手机访问该网站?你只是在做http://localhost:80吗?
  • 不,我的程序中的一行打印了我的主机的 ip。我尝试通过以下方式连接:http://ip:80
  • 这个IP是否恰好是127.0.0.1?
  • 不,是 192.168.99.x

标签: python sockets localhost


【解决方案1】:

要在本地网络上工作,HOST 值必须与您的外部本地地址不同,例如 192.168.1.10。如果在这种情况下您没有连接,则问题可能出在操作系统或路由器的网络设置中。

【讨论】:

  • 所以 HOST 变量一定不是我自己的互联网 ip 吗?
  • 这取决于您使用的网络。 Detailed answer
  • 好的,我仔细研究了ìpconfig 命令。我注意到它使用了我的一个 virtualbox 以太网适配器的 IP 地址。我已经更改了我的脚本,所以我可以手动输入正确的 IP 地址。有什么办法我仍然可以从正确的适配器获取 ip? p.s.如果您更新答案,我会接受。
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 2016-01-10
  • 2021-09-15
  • 2018-08-08
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
  • 2019-08-06
相关资源
最近更新 更多