android中的python套接字无法连接到在virtualbox中运行的python服务器
Posted
技术标签:
【中文标题】android中的python套接字无法连接到在virtualbox中运行的python服务器【英文标题】:python socket in android fails to connect to python server run in virtualbox 【发布时间】:2021-12-23 20:59:18 【问题描述】:我将我的安卓手机和电脑都连接到了同一个 Wifi,在虚拟盒子中运行 python 服务器的电脑。我可以将客户端连接到同一个 VirtualBox 中的服务器,但不能通过手机工作。我对网络的了解有限。我想来自服务器和客户端的 IP 地址是相同的,它应该可以工作。谁能给我一些提示为什么它无法连接以及如何调试它?
我在 VirtualBox Ubuntu 的终端中输入主机名 -I 并得到
10.0.2.15.
我已经在 androidManifest.xml 中添加了这个
<uses-permission android:name="android.permission.INTERNET" />
python 服务器代码
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
port = 10050
socket_address = ('10.0.2.15',port)
server_socket.bind(socket_address)
server_socket.listen(5)
client_socket,addr = server_socket.accept()
android python客户端代码(我使用chaquo.python.android在android上运行python脚本)
def connect():
client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host_ip = '10.0.2.15'
port = 10050
client_socket.connect((host_ip,port))
android 上的错误
Process: com.example.simplecamera, PID: 17958
com.chaquo.python.PyException: TimeoutError: [Errno 110] Connection timed out
【问题讨论】:
【参考方案1】:如果python服务器的代码与你正在执行的代码完全相同,我建议你更改
client_socket,addr = server_socket.accept()
到
while True:
client_socket,addr =server_socket.accept()
print('[+] connection from>>',addr)
服务器需要持续运行才能连接和接受
所以程序看起来像
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
port = 10050
socket_address = ('10.0.2.15',port)
server_socket.bind(socket_address)
server_socket.listen(5)
while True:
client_socket,addr =server_socket.accept()
print('[+] connection from>>',addr)
#to close connection
client_socket.close()
查看https://github.com/dntfury/scaling-winner/blob/master/server_client_part_2/Server.py 以获得完全相同的服务器
【讨论】:
首先谢谢。但是 server_socket.accept() 正在阻止从客户端获取连接,不是吗?此外,当我的客户端和服务器在同一个 Virtualbox 上运行时,它们可以成功运行。 上述程序是一个简单的版本,但可以正常工作。线程可用于改进它或进行更改以使其成为非阻塞。客户端和服务器在同一台机器上也可以正常工作,但您需要将 IP 设置为“0.0.0.0”才能连接来自同一网络的不同设备。 我刚刚尝试了 ip 0.0.0.0 和您的代码,但仍然无法正常工作。顺便说一句,为什么 0.0.0.0 会起作用?我的意思是它阻塞的事实很好,因为它等待客户端连接。问题是另一台设备上的客户端无法识别该 ip 以连接到服务器...对吗? 我认为问题与在 VirtualBox 中运行的服务器有关,但我还不知道为什么。我现在可以在我的主机和手机上成功完成。以上是关于android中的python套接字无法连接到在virtualbox中运行的python服务器的主要内容,如果未能解决你的问题,请参考以下文章
Expo react-native 将无法连接到 socketio(Android 和 iOS)
Python错误:打印(数据+“\ n”)类型错误:尝试通过网络套接字发送命令时无法将str连接到字节[重复]
initctl:无法连接到 Upstart:无法连接到套接字 /com/ubuntu/upstart:docker 映像中的连接被拒绝