如何解决使用套接字与esp32实时通信
我正在开发一个与esp-32连接以共享实时数据的android应用。我目前正在使用Thread打开套接字并维护连接。这是代码。
public TcpClient(String IP,int Port) {
this.IP = IP;
this.Port = Port;
this.mClientThread = initThread();
}
public void run (){
mClientThread.start();
}
/**
* Method to init new thread
* @return
*/
private Thread initThread (){
Thread thread = new Thread() {
@Override
public void run() {
while (flag){
try {
// init the socket
mClientSocket = new Socket();
mClientSocket.setSoTimeout(mSocketTimeOut);
mClientSocket.connect(new InetSocketAddress(IP,Port),mSocketTimeOut);
// reader and writer streams
PrintWriter TX = new PrintWriter(mClientSocket.getOutputStream(),true);
BufferedReader RX = new BufferedReader(new InputStreamReader( mClientSocket.getInputStream()));
// send and receive data
...
// closing input and output streams
TX.close();
RX.close();
mClientSocket.close();
} catch (IOException e) {
...
}
}
}
};
return thread;
}
问题是当服务器没有响应并且我想停止线程时,我必须等待设置的超时时间,这样才能在下一个周期中断循环。
1-有什么建议可以解决吗?
2-这是实现实时通信的好方法。我不能使用网络套接字,因为esp使用的是普通的套接字,更改它们会造成很大的麻烦。
3-使用原始线程,我需要自己处理所有活动更改,这是很多代码。我调查了以下内容。
-异步任务:我相信它使用单个后台线程进行调度。因此,如果我需要两个通信渠道,它将不再是实时的。
-具有PeriodicWorkRequest的Workmanager:由于最小间隔为15分钟,所以我也不能使用它。
任何建议将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。