【发布时间】:2016-08-19 07:06:00
【问题描述】:
我正在制作一个 Android 应用程序,它每 X 分钟检查一次 TCP/IP 服务器套接字是否已在我的计算机上打开。如果是这样,它会进行连接并从中读取数据,如果不是,它会等待并尝试在 X 分钟内再次连接...
当我先打开服务器然后打开客户端(手动)时,下面的代码工作一次,但我无法让客户端继续检查服务器套接字是否根据时间打开/侦听。 异步方法不起作用,因为我不能延迟它,也不能让 Handler 方法工作。
CheckserversocketeveryXmin.java
public class AppListener extends Async {
@Override
public void handleMessage(Message msg) {
final Handler h = new Handler();
final int delay = 5000; //milliseconds
h.postDelayed(new Runnable() {
public void run() {
try {
String msg_received = null;
System.out.println("LISTENING FOR LAST INSTALLED APP");
System.out.println("TRY");
Socket socket = new Socket("85.190.178.23", 5050);
// Get data sent through socket
DataInputStream DIS = new DataInputStream(socket.getInputStream());
System.out.println("DataInputStream Started");
// read data that got sent
msg_received = DIS.readUTF();
System.out.println("Message from server" + msg_received);
// Might not want to close socket, or only the first string will be sent and none after
socket.close();
} catch (Exception e) {
System.out.println("Did not receive string");
}
h.postDelayed(this, delay);
}
}, delay);
}
}
现在我可能会处理这个错误,将此代码放入我的主 Activity 中,出于某种原因,它每 x 秒尝试一次,但从不连接,因为如果我消除延迟,它会连接一次。
在异步中放置一个无限循环(我知道这在技术上并不好)并在其中等待/延迟是一个好方法吗?如果是这样,你们有没有一个指针:)
【问题讨论】:
标签: android sockets networking tcp ip