【问题标题】:Why can't people connect to this "server" made with python sockets?为什么人们不能连接到这个用 python 套接字制作的“服务器”?
【发布时间】:2020-11-01 04:35:39
【问题描述】:
import socket

host, port = socket.gethostbyname(socket.gethostname()), 5555

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(5)


while True:
    conn, addr = s.accept()
    print("<IP-LOGGED> " + addr[0])
    r = conn.recv(1024)
    print(r.decode("utf-8"))

    response = """
HTTP/1.1 200 OK

logger

"""
    conn.sendall(bytes(response, "utf-8"))
    conn.close()

PS:代码不是我的,它来自 youtube IP 抓取器教程。不,我不是脚本小子,我只是想通过一个示例来理解获取 IP / 使用套接字制作 Web 服务器的概念。我刚开始学习套接字

【问题讨论】:

  • 你有你的本地网络,然后是互联网。它们都已连接,但您的路由器具有保护您的防火墙。启用端口转发将使计算机暴露在互联网上,但也意味着来自外部的人可以连接到您计算机上的某些东西。在您的路由器设置中的某处应该有一个选项来端口转发您的计算机ip address 和特定端口。这将是您打开 python 服务器的端口。

标签: python sockets networking ip


【解决方案1】:

此服务器在您的本地网络上。这或多或少意味着,通过与您的计算机相同的路由器连接到 Internet 的人将能够通过搜索 &lt;YOUR-IP-ADDRESS&gt;:&lt;PORT&gt; 访问您的服务器。

但是,您的服务器未连接到 Internet,因此外部人员将无法连接到您的服务器。如果您愿意,您可以在线“购买”服务器(例如,您可以查看https://www.heroku.com,但数量很多)

【讨论】:

    【解决方案2】:

    当我在我的机器上运行socket.gethostbyname(socket.gethostname()) 时,我得到127.0.0.1。如果您也是这种情况,那么您只绑定到 localhost 接口,因此您只能从您自己的计算机访问您的服务器。

    要允许通过任何(IPv4)接口进行连接,您需要使用0.0.0.0:

    host, port = '0.0.0.0', 5555
    

    然后,您还可以从网络中的另一台计算机连接到您的服务器(如果您的路由器配置为将端口 5555 转发到您的计算机,甚至可以通过 Internet)。

    【讨论】:

      猜你喜欢
      • 2018-01-11
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 1970-01-01
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多