【发布时间】:2015-07-25 22:37:30
【问题描述】:
解决了在 LINUX 中禁用防火墙后的问题
我在 Android 和 NodeJs 上编写了简单的应用程序,我正在尝试在 Android 和 Nodejs 之间建立连接。
问题无法连接本地主机但我可以连接到http://socket.io/demos/chat/成功
Server listening at port 3000
Nodejs 文件内容:
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 3000;
server.listen(port, function () {
console.log('Server listening at port %d', port);
});
io.on('connection', function (socket) {
var addedUser = false;
socket.on('new message', function (data) {
socket.broadcast.emit('new message', {
username: socket.username,
message: data
});
});
});
现在我正在尝试从 android 连接到那个:
public class MainActivity extends ActionBarActivity {
private Socket mSocket;
{
try {
mSocket = IO.socket("http://192.168.1.3:3000");
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);
mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
mSocket.on("new message", onNewMessage);
mSocket.connect();
attemptSend();
}
@Override
public void onDestroy() {
super.onDestroy();
mSocket.disconnect();
mSocket.off(Socket.EVENT_CONNECT_ERROR, onConnectError);
mSocket.off(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
mSocket.off("new message", onNewMessage);
}
private void attemptSend() {
mSocket.emit("new message", "say hello from server");
}
private void leave() {
mSocket.disconnect();
mSocket.connect();
}
private Emitter.Listener onConnectError = new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.e("", "error_connect");
}
};
private Emitter.Listener onNewMessage = new Emitter.Listener() {
@Override
public void call(final Object... args) {
Log.e("", "onNewMessage");
}
};
}
不幸的是,我在运行 android 应用程序后收到此消息,并且无法连接到 nodejs:
Logcat:
error_connect
权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.VIBRATE"/>
netstat 命令结果:
mahdi sinjim-server # netstat -pan | grep 3000
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 27041/nodejs
tcp 0 0 192.168.1.3:60146 192.168.1.3:3000 ESTABLISHED 3432/firefox
tcp 0 0 192.168.1.3:3000 192.168.1.3:60146 ESTABLISHED 27041/nodejs
【问题讨论】:
-
使用sockettest.sourceforge.net 调试您的服务器。这是一个简单的程序,您可以在其中检查您的服务器是否真的在工作。
-
@EliaszKubala 服务器端 nodejs 是正确的。从 android 我无法连接到 localhost 或 192.168.1.3。
标签: android node.js sockets socket.io