SocketIO Android没有发出连接事件
我正在使用Android本机socketio库和NodeJS 。
// on my Android activity private Socket mSocket; { try { mSocket = IO.socket("http://IP_OF_MY_SERVER"); } catch (URISyntaxException e) {} } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSocket.connect(); }
。
// on my nodejs app var restify = require('restify'); var server = restify.createServer({ name: 'myapp', version: '1.0.0' }); var io = require('socket.io')(server.server); server.use(restify.acceptParser(server.acceptable)); server.use(restify.queryParser()); server.use(restify.bodyParser()); io.on('connection', function(socket){ console.log('a user connected'); socket.on('new-item', function(data) { console.log(data); }); });
我正在关注官方指南,但仍然mSocket.connect()
不发出connection
事件,并且当我启动活动时没有a user connected
到我的控制台上。
你能告诉我我缺less什么,如何debugging?
编辑
我的Ubuntu服务器上的NodeJS应用程序: http : //paste.ubuntu.com/14233470/
Android活动: http : //paste.ubuntu.com/14233482/
编辑2
我已经改变了我的代码,如下所示:
var io = require('socket.io').listen(server);
而这一次,当我启动活动时,我收到这个错误
myapp在http://104.131.99.145:3000上聆听
http.js:691 throw new Error('Can\'t set headers after they are sent.'); ^ Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (http.js:691:11) at ServerResponse.format (/var/www/biditapi.erayalakese.com/node_modules/restify/lib/response.js:145:10) at ServerResponse.send (/var/www/biditapi.erayalakese.com/node_modules/restify/lib/response.js:338:14) at emitRouteError (/var/www/biditapi.erayalakese.com/node_modules/restify/lib/server.js:201:13) at onRoute (/var/www/biditapi.erayalakese.com/node_modules/restify/lib/server.js:754:21) at Router.find (/var/www/biditapi.erayalakese.com/node_modules/restify/lib/router.js:608:5) at Server._route (/var/www/biditapi.erayalakese.com/node_modules/restify/lib/server.js:747:21) at routeAndRun (/var/www/biditapi.erayalakese.com/node_modules/restify/lib/server.js:705:14) at Server._handle (/var/www/biditapi.erayalakese.com/node_modules/restify/lib/server.js:725:9) at Server.onRequest (/var/www/biditapi.erayalakese.com/node_modules/restify/lib/server.js:326:14) at Server.EventEmitter.emit (events.js:98:17) at HTTPParser.parser.onIncoming (http.js:2108:12) at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23) at Socket.socket.ondata (http.js:1966:22) at TCP.onread (net.js:525:27)
几个关键的注意事项:
-
创build一个
Socket
对象:private Socket mSocket; { try { mSocket = IO.socket(CHAT_SERVER_URL); // Your server's URL } catch (URISyntaxException e) { throw new RuntimeException(e); } }
-
onCreate()
:连接并设置套接字错误侦听器@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.connect(); } private Emitter.Listener onConnectError = new Emitter.Listener() { @Override public void call(Object... args) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "Unable to connect to NodeJS server", Toast.LENGTH_LONG).show(); } }); } };
-
断开
onDestroy()
方法中的Socket@Override protected void onDestroy() { super.onDestroy(); mSocket.disconnect(); mSocket.off(Socket.EVENT_CONNECT_ERROR, onConnectError); mSocket.off(Socket.EVENT_CONNECT_TIMEOUT, onConnectError); }
没有得到错误敬酒是设置这个权利的第一个里程碑。
- 创build一个WLAN :
(以pipe理员权限打开命令行,运行这些命令:)
netsh wlan set hostednetwork mode = allow ssid = NodeSocket key = 1234okok
netsh wlan启动hostednetwork
确保您的Android设备已连接到此networking,并且您的Node.js
服务器已启动并正在运行。