簡體   English   中英

如何使用 Python sockets 連接互聯網上的兩台計算機?

[英]How to connect two computers on the internet using Python sockets?

無論我在網上閱讀的任何教程都規定了如何在本地網絡上連接兩台計算機。

我想要做的是將我的 Android 手機(我有一個終端仿真器,上面安裝了 Python - Termux)連接到我的電腦。

服務器 --> Android 電話 --> 互聯網

客戶端 --> 計算機 --> 互聯網

客戶端代碼

import socket
server_ip = "<My phone's ip which I can google on my phone>"
port = 9999

s = socket.socket()
s.connect((server_ip, port))
s.send(str.encode("Hello there!", 'utf-8'))
s.close()

服務器代碼

import socket

s = socket.socket()
s.bind(('', 9999))
s.listen(1)
conn, addr = s.accept()
print( str(conn.recv(1024), 'utf-8') )

問題是,如果我嘗試這個,我會得到 TimeoutError。

(PC端代碼)

>>> import socket
>>> s = socket.socket()
>>> s.connect(('72.128.66.21', 9999))
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    s.connect(('72.128.66.21', 9999))
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

我輸入的IP好像錯了,所以我重新檢查了一下,不是。 服務器托管在 IP 和端口上。

另外,我認為 Termux 不像某種虛擬環境,因此服務器實際上應該是可公開訪問的。

編輯:如果這有任何幫助,我正在使用另一部手機的便攜式熱點作為對互聯網的訪問,所以它就像一個路由器。

編輯 2:另外,我嘗試執行 telnet myPhone'sIP portNo並且失敗了。

blackapps在他的題庫中間回答了我的問題。

我確實在使用我的 SIM 卡在手機上訪問互聯網。 如果他是正確的,那意味着我的手機不能先收到來自其他設備的請求。 我必須與他們建立聯系。 因此,我不能充當服務器。 因此,這個問題與 Python 完全無關,應該關閉。

server_ip = "<My phone's ip which I can google>"

在客戶端上搜索服務器的 ip 地址? 你會怎么做?

服務器 --> Android 電話 --> 互聯網

服務器電話通過wifi和路由器連接到互聯網嗎? 還是用simcard?

如果 simcard 那么你想要什么是不可能的,因為手機提供商不允許在手機上運行服務器......你可以運行服務器但傳入連接被阻止。

我正在使用另一部手機的便攜式熱點作為對 Internet 的訪問,所以它就像一個路由器。

目前尚不清楚您是否會將該熱點用於運行服務器的手機。 如果是這樣,那么它將無法工作,因為該熱點電話的傳入連接被提供商阻止。

請參閱此內容以了解有關在 python 中使用套接字模塊來制作服務器和客戶端套接字並在它們之間建立連接: https://www.journaldev.com/15906/python-socket-programming-server-client

暫無
暫無

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

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