簡體   English   中英

python套接字未連接到Web服務器

[英]python socket not connecting to web server

我正在嘗試使用 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"))

謝謝!

一般來說,您應該能夠連接到任何全球可用的地址或 DNS 名稱,確保途中沒有網絡限制。 但是,如果您通過 Internet 進行通信,則必須偵聽本地可用於全局路由的地址。

至於具體的代碼,有兩個問題:

  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()

我正在嘗試使用 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"))

謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM