【问题标题】:python socket not connecting to web serverpython套接字未连接到Web服务器
【发布时间】:2020-10-29 15:50:35
【问题描述】:

我正在尝试使用 python socket 模块连接到 ngrok 服务器。如果我将 ngrok 放入我的浏览器,它会正确连接,所以问题出在我的客户端代码的某个地方。这是服务器代码:

#server.py
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        self.data = self.request.recv(1024).strip()
        print("{} wrote:".format(self.client_address[0]))
        print(self.data)
if __name__ == "__main__":
    HOST, PORT = "192.168.86.43", 8080
    server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()

这里是客户端:

#client.py
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
    sock.connect(("http://urlhere.ngrok.io", 8080))
    sock.sendall(bytes("Hello" + "\n", "utf-8"))

谢谢!

【问题讨论】:

  • 您连接的地址不正确。尝试使用192.168.86.43
  • @RobertNavado 我希望即使我不在网络上也能连接,所以我不能使用内部 IP

标签: python sockets socketserver


【解决方案1】:

一般而言,您应该能够连接到任何全球可用的地址或 DNS 名称,以确保途中没有网络限制。但是,如果您通过 Internet 进行通信,则必须侦听本地可用于全局路由的地址。

至于具体的代码,有2个问题:

  1. 套接字应连接到地址或 DNS 名称。协议是用套接字类型定义的。你的情况
import socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
    sock.connect(("localhost", 8080))
    sock.sendall(bytes("Hello" + "\n", "utf-8"))
  1. 您在服务器中绑定到某个特定的不相关地址。要运行您的代码,您应该绑定到本地主机或“任何可用”地址“0.0.0.0”:
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        self.data = self.request.recv(1024).strip()
        print("{} wrote:".format(self.client_address[0]))
        print(self.data)
if __name__ == "__main__":
    HOST, PORT = "0.0.0.0", 8080
    server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()

【讨论】:

  • 我想即使不在同一个网络也能连接,用你的方法可以吗?
  • IP 也不是问题,如果我运行 connect to 192.168.86.43 它可以工作,但我希望能够连接到转发到 192.168.86.43 的 ngrok
  • @TanujKS:您可以在connect() 调用中指定DNS 名称,只是不能使用URL 形式。因此sock.connect(("urlhere.ngrok.io", 8080)) 应该连接。
  • 是的。您可以连接到任何全球可用的地址或 DNS 名称,确保途中没有网络限制。但是,如果您通过 Internet 进行通信,则必须侦听本地可用于全局路由的地址。
猜你喜欢
  • 1970-01-01
  • 2017-02-25
  • 2021-02-11
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
相关资源
最近更新 更多