我已经成功地编译了一个Socket.IO/Android项目,现在我试图让它在NodeJS服务器上与NodeJS通信。我把这个项目放在我的邮箱里:
https://dl.dropboxusercontent.com/u/86164338/socketIOAndroid.zip
所有东西都编译并运行,但我没有看到NodeJS的输出。
这是基于:https://github.com/Gottox/socket.io-java-client
请注意,有关于编译Java代码和将jar文件复制到libs文件夹的说明:
git克隆git://github.com/Gottox/socket.io-java-client.git CDSocket.IO-java-client ant jar mv jar/socketio.jar /path/to/your/libs/project
任何帮助都是非常感谢的。
Java代码:
package com.depictlabs.testsockets03;
import java.net.MalformedURLException;
import java.net.URI;
import org.json.JSONObject;
import io.socket.SocketIO;
import io.socket.IOCallback;
import io.socket.IOAcknowledge;
import io.socket.SocketIOException;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import org.json.JSONException;
import org.json.JSONObject;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SocketIO socket;
try{
System.out.println("Initializing Connection.");
socket = new SocketIO("http://localhost:3000/");
socket.connect
(
new IOCallback(){
@Override
public void onMessage(JSONObject json, IOAcknowledge ack) {
try {
System.out.println("Server said:" + json.toString(2));
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onMessage(String data, IOAcknowledge ack) {
System.out.println("Server said: " + data);
}
@Override
public void onError(SocketIOException socketIOException) {
System.out.println("an Error occured");
socketIOException.printStackTrace();
}
@Override
public void onDisconnect() {
System.out.println("Connection terminated.");
}
@Override
public void onConnect() {
System.out.println("Connection established");
}
@Override
public void on(String event, IOAcknowledge ack, Object... args) {
System.out.println("Server triggered event '" + event + "'");
}
}
);
try {
// This line is cached until the connection is established.
System.out.println("Sending message to server.");
socket.send("user message");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}NodeJS代码:
var http = require('http')
, io = require('socket.io');
var app = http.createServer();
app.listen(3000);
console.log('Server running at http://127.0.0.1:3000/');
// Socket.IO server
var io = io.listen(app)
, nicknames = {};
io.sockets.on('connection', function (socket) {
socket.on('user message', function (msg) {
console.log('Server running at http://127.0.0.1:3000/');
socket.broadcast.emit('user message', {user: socket.nickname, message: msg.message});
});
socket.on('nickname', function (nick, fn) {
console.log('Server running at http://127.0.0.1:3000/');
nickname = nick.nickname;
if (nicknames[nickname]) {
fn(true);
} else {
fn(false);
nicknames[nickname] = socket.nickname = nickname;
socket.broadcast.emit('announcement', {user: nickname, action: 'connected'});
io.sockets.emit('nicknames', nicknames);
}
});
socket.on('disconnect', function () {
console.log('Server running at http://127.0.0.1:3000/');
if (!socket.nickname) return;
delete nicknames[socket.nickname];
socket.broadcast.emit('announcement', {user: socket.nickname, action: 'disconected'});
socket.broadcast.emit('nicknames', nicknames);
});
});发布于 2014-06-26 11:48:37
您的问题是,node.js服务器在本地主机上运行,而任何设备或模拟器都运行在虚拟机上,因此,永远不要监听您的PC的本地主机。您需要更改URL
socket = new SocketIO("http://localhost:3000/");为
例如,您的计算机在网络环境中的公共或静态IP:
socket = new SocketIO("http://192.168.1.23:3000/");最好的。C
https://stackoverflow.com/questions/19674118
复制相似问题