【发布时间】:2020-07-31 03:05:30
【问题描述】:
我正在尝试将我的 android 应用程序(客户端)连接到我的 PC(python 服务器)。他们都在同一个网络上。我可以从我的 PC 和 PC 上从手机 ping 我的 android 手机。但是,当我尝试使用套接字连接它们时,android 应用程序会卡在连接状态,一段时间后会引发超时异常。 这是Android Client类的代码:
public class Client extends AsyncTask<Void, Void, Void> {
private String mCommand;
private String mHostIP;
public Client(String mCommand, String mHostIP) {
this.mCommand = mCommand;
this.mHostIP = mHostIP;
}
@Override
protected Void doInBackground(Void... voids) {
try {
InetAddress serverAddr = InetAddress.getByName(mHostIP);
Socket soc = new Socket(serverAddr,9999);
OutputStream toServer = soc.getOutputStream();
PrintWriter output = new PrintWriter(toServer);
output.println(mCommand);
DataOutputStream out = new DataOutputStream(toServer);
out.writeBytes(mCommand);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
卡在新的 Socket 上一段时间后抛出异常。
这里是 Python 服务器的代码:
import socket
import os
hostname = socket.gethostname()
IPAddr = socket.gethostbyname(hostname)
print('My IP: '+IPAddr)
port = 9999
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print ("socket successfully created")
server_address = ('192.168.10.4', 9999)
s.bind(server_address)
s.listen(1)
print ("socket is listening")
while True:
try:
c, addr = s.accept()
print ('Got connection from', addr)
type = c.recv(1024).decode('utf-8')
print(type)
finally:
print('Could not connect')
c.close()
break
【问题讨论】:
-
客户端使用的ip是什么?抛出哪个异常?
-
展示你如何开始你的异步任务。
-
print('My IP: '+IPAddr)。嗯.. 打印的是什么? -
'192.168.10.4',为什么要硬编码那个地址?和印刷的有区别吗?你为什么要将你的服务器绑定到一个/那个地址? -
对不起,我不知道出了什么问题。有防火墙吗?
标签: python android sockets tcp