我正在尝试通过本地网络向ESP8266发送命令。 ESP处理命令以打开例如灯。 ESP的代码在这里无关紧要。我的问题是我的Android应用程序的响应时间远高于在同一部手机上使用telnet(app = 2秒,telnet =几乎立即)。我不确定问题是选择的方法来编写数据还是我的方法来实现线程(参见代码)。我尝试了不同的StreamWriters(BufferedOutputstream等),也尝试了线程的优先级,但它仍然没有用。有任何想法吗?
public class NetworkController extends Thread {
private static final String HOST = "192.168.178.69";
private static final int PORT = 50344;
public boolean isAlive;
public boolean connected = true;
public MainActivity main;
public Socket client;
private DataInputStream input;
private BufferedOutputStream output;
private BufferedWriter outputWriter;
@Override
public void run() {
try {
client = new Socket(HOST, PORT);
input = new DataInputStream(client.getInputStream());
output = new BufferedOutputStream(client.getOutputStream());
outputWriter = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
} catch (IOException e) {
e.printStackTrace();
}
if(client != null) {
isAlive = true;
System.out.println("Is Connected");
while (connected) {
if (!MainActivity.commandQueue.isEmpty()) {
String command = MainActivity.commandQueue.poll();
command += "\n";
try {
output.write(command.getBytes());
output.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
isAlive = false;
System.out.println("Thread is not reachable for some Reason");
}
}
尽管我的代码现在不能安全使用,但有一个简短的解释:如果有人点击某个按钮,它会将命令添加到commandQueue中,该命令会在此Thread中不断检查。
编辑:我做了一些测试并监控了ESP。问题绝对是outputWriter。线程立即响应,ESP也立即获得第一个数据字节,但整个包(只是短字符串)需要更长的时间才能通过telnet连接进行传输。有没有想过使用快速方法在输出流上写入数据?