Socket.io android node.js
Socket.io android node.js
我正在尝试在 node.js 和 android 之间创建一个基本的聊天应用程序,当我 运行 服务器和客户端我可以在日志中看到他们连接和我的android 应用程序发送消息但服务器从未收到,我的android代码是:
private Socket socket;
{
IO.Options opts = new IO.Options();
opts.forceNew = true;
opts.reconnection = true;
try {
socket = IO.socket("http://192.168.3.7:100");
} catch (URISyntaxException e) {
Log.e("abc", "index=" + e);
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_promociones);
socket.on("new message", onNewMessage);
socket.connect();
}
class WifiScanReceiver extends BroadcastReceiver {
@SuppressLint("UseValueOf")
public void onReceive(Context c, Intent intent) {
ObjWifi.startScan();
messages =String.valueOf(id)+';'+ Arrays.toString(ret)+';'+String.valueOf(zona);
socket.emit(messages);
String str;
int i1 = r.nextInt(4 - 1) + 1;
if (zona == 0) {
str = "img_" + 4;
} else {
str = "img_" + zona + "_" + i1;
}
fondo.setImageDrawable(getResources().getDrawable(getResourceID(str, "drawable", getApplicationContext())));
}
}
我还想让传入的消息(总是数字)存储在名为 zona 的变量中。
我的服务器端代码是:
var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var messages = [{
text: "Hola soy un mensaje",
author: "Daniel"
}];
app.use(express.static('public'));
io.on('connection', function(socket) {
var currentdate = new Date();
var datetime = currentdate.getDate() + "/"
+ (currentdate.getMonth()+1) + "/"
+ currentdate.getFullYear() + " @ "
+ currentdate.getHours() + ":"
+ currentdate.getMinutes() + ":"
+ currentdate.getSeconds();
console.log('Alguien se ha conectado con Sockets',datetime);
socket.emit('messages', messages);
socket.on('disconnect',function(){
console.log('Alguien se ha desconectado',datetime);
});
socket.on('new-message', function(data) {
messages.push(data);
io.sockets.emit('messages', messages);
});
});
server.listen(100, function() {
console.log("Servidor corriendo en http://localhost:100");
});
您正在侦听从未触发的某些事件。
在服务器上,您正在等待名称为 "new-message" 的套接字触发您的函数。
socket.on('new-message', function(data) {
messages.push(data);
io.sockets.emit('messages', messages);
});
这将在使用这些名称之一进行发射后触发。相反,您的 Android 应用会执行以下操作:
messages =String.valueOf(id)+';'+ Arrays.toString(ret)+';'+String.valueOf(zona);
socket.emit(messages);
使用此 emit,您将消息 var content 作为发送到套接字的名称。你应该做的是
socket.emit("new-message", messages);
这样您的服务器将接收套接字"new-message"并进入您的函数。
对于检索数据,您可能会发现在这两种情况下都将其作为 JSONObject 发送很有用,因为在 Android 中您发送的是用 ; 分隔元素的字符串,这意味着操作该字符串以获得每个值收到时
在节点中:
socket.on('new-message', function (data) {
id = data.id;
RSSI[0] = data.rssi;
zona = data.zona;
});
在Android中:
onNewMessage = new Emitter.Listener() {
@Override
public void call(final Object... args) {
//args[i] is the data received
String data = args[0].toString();
try{
JSONObject dataJSON = new JSONObject(data);
zona = dataJSON.get("zona");
}catch(JSONException e){
e.printStackTrace();
}
}
};
我正在尝试在 node.js 和 android 之间创建一个基本的聊天应用程序,当我 运行 服务器和客户端我可以在日志中看到他们连接和我的android 应用程序发送消息但服务器从未收到,我的android代码是:
private Socket socket;
{
IO.Options opts = new IO.Options();
opts.forceNew = true;
opts.reconnection = true;
try {
socket = IO.socket("http://192.168.3.7:100");
} catch (URISyntaxException e) {
Log.e("abc", "index=" + e);
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_promociones);
socket.on("new message", onNewMessage);
socket.connect();
}
class WifiScanReceiver extends BroadcastReceiver {
@SuppressLint("UseValueOf")
public void onReceive(Context c, Intent intent) {
ObjWifi.startScan();
messages =String.valueOf(id)+';'+ Arrays.toString(ret)+';'+String.valueOf(zona);
socket.emit(messages);
String str;
int i1 = r.nextInt(4 - 1) + 1;
if (zona == 0) {
str = "img_" + 4;
} else {
str = "img_" + zona + "_" + i1;
}
fondo.setImageDrawable(getResources().getDrawable(getResourceID(str, "drawable", getApplicationContext())));
}
}
我还想让传入的消息(总是数字)存储在名为 zona 的变量中。
我的服务器端代码是:
var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var messages = [{
text: "Hola soy un mensaje",
author: "Daniel"
}];
app.use(express.static('public'));
io.on('connection', function(socket) {
var currentdate = new Date();
var datetime = currentdate.getDate() + "/"
+ (currentdate.getMonth()+1) + "/"
+ currentdate.getFullYear() + " @ "
+ currentdate.getHours() + ":"
+ currentdate.getMinutes() + ":"
+ currentdate.getSeconds();
console.log('Alguien se ha conectado con Sockets',datetime);
socket.emit('messages', messages);
socket.on('disconnect',function(){
console.log('Alguien se ha desconectado',datetime);
});
socket.on('new-message', function(data) {
messages.push(data);
io.sockets.emit('messages', messages);
});
});
server.listen(100, function() {
console.log("Servidor corriendo en http://localhost:100");
});
您正在侦听从未触发的某些事件。
在服务器上,您正在等待名称为 "new-message" 的套接字触发您的函数。
socket.on('new-message', function(data) {
messages.push(data);
io.sockets.emit('messages', messages);
});
这将在使用这些名称之一进行发射后触发。相反,您的 Android 应用会执行以下操作:
messages =String.valueOf(id)+';'+ Arrays.toString(ret)+';'+String.valueOf(zona);
socket.emit(messages);
使用此 emit,您将消息 var content 作为发送到套接字的名称。你应该做的是
socket.emit("new-message", messages);
这样您的服务器将接收套接字"new-message"并进入您的函数。
对于检索数据,您可能会发现在这两种情况下都将其作为 JSONObject 发送很有用,因为在 Android 中您发送的是用 ; 分隔元素的字符串,这意味着操作该字符串以获得每个值收到时
在节点中:
socket.on('new-message', function (data) {
id = data.id;
RSSI[0] = data.rssi;
zona = data.zona;
});
在Android中:
onNewMessage = new Emitter.Listener() {
@Override
public void call(final Object... args) {
//args[i] is the data received
String data = args[0].toString();
try{
JSONObject dataJSON = new JSONObject(data);
zona = dataJSON.get("zona");
}catch(JSONException e){
e.printStackTrace();
}
}
};