gpt4 book ai didi

android - 一段时间后 Android 服务中未接收到 TCP 套接字

转载 作者:可可西里 更新时间:2023-11-01 02:54:43 26 4
gpt4 key购买 nike

我的服务从 DSL 路由器“FRITZ!Box”接收电话调用信息。当有人打电话时,路由器会在端口 1012 将电话号码发送到我的服务。它有效,但过了一会儿我的服务就不再收到了。该服务正在运行,这不是原因,但它没有从我的路由器上读取任何内容。没有异常抛出,服务保持在 while 循环中...

public class CallMonitorService extends Service {

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

Notification notification = new Notification(icon, "service", System.currentTimeMillis());
Intent notificationIntent = new Intent(this, Main.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(this, "title", "text", pendingIntent);
notification.flags |= Notification.FLAG_NO_CLEAR;
startForeground(1337, notification);

new ListenThread().start();
}
}

class ListenThread extends Thread {

public void run() {

Looper.prepare();

Handler handler = new Handler() {

public void handleMessage(Message msg) {

BufferedReader in = null;

Socket socket = new Socket();
socket.setKeepAlive(true);
socket.connect(new InetSocketAddress(InetAddress.getByName("http://fritz.box"), 1012), 30*1000);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()), 8 * 1024);

String line = null;

while ((line = in.readLine()) != null) {
Log.d("TAG", line);
}


}
};


handler.sendEmptyMessage(0);
Looper.loop();
}


}

最佳答案

所以看起来一旦您的路由器停止发送数据,循环就会结束并且您的处理程序退出 handleMessage。那时您需要向处理程序发送另一条消息,以便它连接并再次开始读取数据。

此外,这个问题看起来可能很相似,并且处理在使用 readline 通过套接字读取数据时出现的问题。 Android TCP app hanging on inStream.readline()

希望对您有所帮助。

关于android - 一段时间后 Android 服务中未接收到 TCP 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com