【问题标题】:Python server only working on local wifiPython 服务器仅在本地 wifi 上工作
【发布时间】:2015-09-29 18:19:30
【问题描述】:

代码:

import socket, threading

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.bind(("my ipv4 from ipconfig", 12))

server.listen(5)

def client_handler(client_socket):
    request = client_socket.recv(100)

    print "[*] Received: " + request

    client_socket.close()

while True:
    client, addr = server.accept()
    print "[*] Accepted connection from: %s:%d" % (addr[0], addr[1])
    servert = threading.Thread(target=client_handler, args=(client,))
    servert.start()

所以服务器似乎在本地工作正常,但如果我让我在不同网络上的朋友连接,它不会连接。我尝试从路由器进行端口转发 http://i.stack.imgur.com/wSUir.png(无法发布 img 显然会导致 my_reputation

我也尝试使用从 whatismyip 网站获得的 ip,但出现错误:

错误:[Errno 10049] 请求的地址在其上下文中无效

关于我可以做些什么以便其他人可以联系的任何想法?谢谢。

【问题讨论】:

  • 看起来您正在将转发设置为相同的 IP。您的 WAN IP 应该是您的公共 IP(您从 whatismyip 获得),您的 LAN IP 应该是您本地机器的 IP(您从 ipconfig 获得)。
  • 尝试使用 0.0.0.0: 作为您的 IP 地址并检查

标签: python python-2.7 network-programming ip server


【解决方案1】:

当您尝试从 LAN 外部访问您的服务器时,您应该在创建套接字对象时使用 0.0.0.0 作为您的 IP 地址。 0.0.0.0 通常表示默认路由(到“其余”互联网的路由,除了本地网络中的路由等)。如果您使用 DCHP 分配的 IP 地址(在您的情况下是路由器),则连接到网络的设备(路由器)只知道您的 IP 地址是您在 $ifconfig 命令中获得的,一个私有 IP 地址客户不知道的

【讨论】:

  • 所以如果我使用“0.0.0.0”我必须给客户端哪个IP?公开的?谢谢:)
  • 是的,公共的,您需要确保您的 NAT 端口正确地将其转发到您的私有 IP。
  • 是的,如果您使用的是路由器,请检查路由器上的网桥功能,它会将所有 WAN 流量转发到 LAN 端口,因此您可以直接在 LAN 端口使用设备上的公共 IP。
  • 老兄最后一个问题,在客户端脚本:client.connect(("", port)) 我输入哪个ip,它不接受公共的
  • 不,我的意思是另一个网络上的客户端。它将数据包发送到服务器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2012-12-17
  • 2021-12-16
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多