我在android中保持套接字连接有麻烦。
我在应用程序中使用Socket.IO客户端java库。
屏幕打开时保持插座连接。
但是,如果屏幕关闭,套接字会因ping超时而断开连接。
我该如何解决这个问题?
我像这样打开连接。
private static final String EVENT_CONNECT = Socket.EVENT_CONNECT;
private static final String EVENT_MESSAGE = Socket.EVENT_MESSAGE;
private static final String EVENT_DISCONNECT = Socket.EVENT_DISCONNECT;
private static final String EVENT_PING = Socket.EVENT_PING;
private static final String EVENT_CONNECT_TIMEOUT = Socket.EVENT_CONNECT_TIMEOUT;
private static final String EVENT_ERROR = Socket.EVENT_ERROR;
public void connect() {
if (socket != null && socket.connected() == true) {
return;
}
IO.Options options = new IO.Options();
options.timeout = 60 * 1000;
options.reconnection = true;
Log.d(TAG, "try socket connect");
socket.on(EVENT_CONNECT, this::onConnected)
.on(EVENT_MESSAGE, this::onMessage)
.on(EVENT_DISCONNECT, this::onDisconnected)
.on(EVENT_PING, this::onPing)
.on(EVENT_CONNECT_TIMEOUT, this::onConnectTimeout)
.on(EVENT_ERROR, this::onError);
socket.connect();
}
这是我的服务器端代码
var Socket = require('socket.io');
var io = Socket(server, { 'pingInterval': 25 * 1000 });
var port = process.env.PORT || 3000;
io.on('connection', function(socket){
console.log('a user connected');
...
socket.on('disconnect', function(data){
(typeof socket.member != 'undefined') && disconnect(socket);
console.log(data);
});
});
ping间隔为25秒,超时为60秒。
当android屏幕关闭时,客户端不适用于EVENT_PING
。其他事件正常工作。
服务器与日志断开连接(ping超时)。
我解决这个问题如下:
private static final String EVENT_PING = "ping1";
private static final String EVENT_PONG = "pong1";
public void connect() {
if (socket != null && socket.connected() == true) {
return;
}
IO.Options options = new IO.Options();
options.timeout = 60 * 1000;
options.reconnection = true;
Log.d(TAG, "try socket connect");
socket.on(EVENT_CONNECT, this::onConnected)
.on(EVENT_MESSAGE, this::onMessage)
.on(EVENT_DISCONNECT, this::onDisconnected)
.on(EVENT_PING, this::onPing)
.on(EVENT_CONNECT_TIMEOUT, this::onConnectTimeout)
.on(EVENT_ERROR, this::onError);
socket.connect();
}
private void onPing(Object... args) {
Log.d(TAG, "socket ping");
socket.emit(EVENT_PONG);
}
这是服务器代码。
var pingInterval = 25 * 1000;
var Socket = require('socket.io');
var io = Socket(server, { 'pingInterval': pingInterval });
var port = process.env.PORT || 3000;
io.on('connection', function(socket){
console.log('a user connected');
function sendPing() {
socket.emit('ping1');
}
setTimeout(sendPing, pingInterval);
socket.on('disconnect', function(data){
(typeof socket.member != 'undefined') && disconnect(socket);
console.log(data);
});
socket.on('pong1', function(data) {
setTimeout(sendPing, pingInterval);
console.log('pong');
});
});
我正在使用heroku和android客户端node.jsweb服务器进行websocket.io通信 我想在服务器信息发送到客户端Android系统时收到它,即使Android系统屏幕关闭 所以我基本上是做一个服务,一个套接字。在侦听器上,线程 也确实应用了部分_唤醒_锁定、前台服务、发送通知、每5秒乒乓一次... 当Android的屏幕打开时,我的系统运行良好。 但是在Android屏幕关闭后
关闭屏幕盖时 设定关闭屏幕盖时的动作。 标准 关闭屏幕盖时,显示专用的画面。 进入睡眠模式 让主机进入睡眠模式。 提示 若主机处于锁定状态(POWER(电源)/HOLD(固定)按钮滑至下方),即使已选择[进入睡眠模式],主机仍不会在关闭屏幕盖时进入睡眠模式。 屏幕盖关闭时显示的画面 在屏幕盖关闭时按下L/R按钮,即可变更显示的内容。 同时按下L/R按钮 每次同时按下L/R按钮,可交替显示月历/
我试图创建一个Android应用程序,不断记录设备位置数据实时,而设备屏幕关闭。我的代码在Android6.0和更早的版本中工作正常,但似乎Android7.0+破坏了我的应用程序。 我已经实现了一个Android前台服务,它使用wakelock并订阅了Google FusedLocation API。一旦屏幕关闭,回调就永远不会触发。 Android O的代码示例 让应用程序一直在Android
问题内容: 我有一个使用简单套接字在两个系统之间传递某些字符的应用程序。我的Java应用程序作为服务器运行。我建立了良好的连接,甚至传递了一条消息。但是,发送完一条消息后,我的连接关闭。 从我可以看出来的好像是在关闭时,套接字本身正在关闭吗?!这很不好,因为我有多个要在同一连接上发送的消息。 我吃饱了吗?如何在Java中维护此连接? 问题答案: 是的,关闭任何作家/读者将关闭他们包装的所有其他作家
本文向大家介绍Android手机保持屏幕高亮方法,包括了Android手机保持屏幕高亮方法的使用技巧和注意事项,需要的朋友参考一下 一开始接触android应用项目时,在项目快上线时策划要求加个高亮,每次都是直接从网上百度一下,现在做游戏了,却还是这个需求,这里备份一下方便后续的查找,毕竟是自己写好且验证没问题的 :) 首先,在Activity里添加一下代码: 成员变量: 然后,在AndroidM
因此,我有一个客户机wich连续发送和接收数据消息,wich工作正常,然而,当我关闭/停止客户机时,我会得到以下单行错误: 尽管我试图关闭插座--最终封闭了。现在我的问题是为什么我会收到这个错误,这个行为是否正常,以及如何正确处理这个错误。下面是我的代码: