如何使用 Python 套接字连接互联网上的两台计算机?
How to connect two computers on the internet using Python sockets?
无论我在网上读过什么教程,都说明了如何在本地网络上连接两台计算机。
我想做的是将我的 Android phone(我有一个终端模拟器,上面安装了 Python -- Termux)连接到我的电脑。
服务器 --> Android phone --> 互联网
客户端 --> 计算机 --> 互联网
客户代码:
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 是某种虚拟环境,因此服务器实际上应该是可公开访问的。
编辑:如果这有任何帮助,我正在使用另一个 phone 的便携式热点访问互联网,所以它就像一个路由器。
编辑 2:此外,我尝试使用 telnet myPhone'sIP portNo 但失败了。
server_ip = "<My phone's ip which I can google>"
你在客户端google服务器的ip地址?你会怎么做?
Server --> Android phone --> Internet
服务器 phone 是通过 wifi 和路由器连接到互联网的吗?或者使用 SIM 卡?
如果是 simcard 那么你想要的是不可能的,因为 cellphone 供应商不允许 phone 上的 运行ning 服务器...你可以 运行服务器,但传入连接被阻止。
I am using portable hotspot of another phone as an access to the Internet, so it's acting like a router.
目前尚不清楚您是否会将该热点用于您的服务器 运行 所在的 phone。如果是这样,那么它将无法工作,因为到该热点的传入连接-phone 被提供商阻止。
blackapps 在他的题库中间回答了我的问题。
我确实在 phone 上使用 SIM 卡上网。如果他是正确的,那就意味着我的 phone 不能让来自其他设备的请求先进入。我必须在我这边与他们建立联系。因此,我不能充当服务器。因此,这个问题与 Python 完全无关,应该关闭。
无论我在网上读过什么教程,都说明了如何在本地网络上连接两台计算机。
我想做的是将我的 Android phone(我有一个终端模拟器,上面安装了 Python -- Termux)连接到我的电脑。
服务器 --> Android phone --> 互联网
客户端 --> 计算机 --> 互联网
客户代码:
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 是某种虚拟环境,因此服务器实际上应该是可公开访问的。
编辑:如果这有任何帮助,我正在使用另一个 phone 的便携式热点访问互联网,所以它就像一个路由器。
编辑 2:此外,我尝试使用 telnet myPhone'sIP portNo 但失败了。
server_ip =
"<My phone's ip which I can google>"
你在客户端google服务器的ip地址?你会怎么做?
Server --> Android phone --> Internet
服务器 phone 是通过 wifi 和路由器连接到互联网的吗?或者使用 SIM 卡?
如果是 simcard 那么你想要的是不可能的,因为 cellphone 供应商不允许 phone 上的 运行ning 服务器...你可以 运行服务器,但传入连接被阻止。
I am using portable hotspot of another phone as an access to the Internet, so it's acting like a router.
目前尚不清楚您是否会将该热点用于您的服务器 运行 所在的 phone。如果是这样,那么它将无法工作,因为到该热点的传入连接-phone 被提供商阻止。
blackapps 在他的题库中间回答了我的问题。
我确实在 phone 上使用 SIM 卡上网。如果他是正确的,那就意味着我的 phone 不能让来自其他设备的请求先进入。我必须在我这边与他们建立联系。因此,我不能充当服务器。因此,这个问题与 Python 完全无关,应该关闭。