簡體   English   中英

Android的SocketIO未發出連接事件

[英]SocketIO Android not emitting connection event

我正在使用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

您能告訴我我缺少什么,如何調試它?


編輯

我的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)

一些主要注意事項:

  1. 創建一個Socket對象:

     private Socket mSocket; { try { mSocket = IO.socket(CHAT_SERVER_URL); // Your server's URL } catch (URISyntaxException e) { throw new RuntimeException(e); } } 
  2. 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(); } }); } }; 
  3. onDestroy()方法中斷開套接字

     @Override protected void onDestroy() { super.onDestroy(); mSocket.disconnect(); mSocket.off(Socket.EVENT_CONNECT_ERROR, onConnectError); mSocket.off(Socket.EVENT_CONNECT_TIMEOUT, onConnectError); } 

沒有得到錯誤的消息是正確設置的第一個里程碑。

  1. 創建一個WLAN

(使用管理員權限打開命令行,運行以下命令:)

netsh wlan設置托管網絡模式=允許ssid = NodeSocket密鑰= 1234okok

netsh wlan啟動托管網絡

WLAN

確保您的Android設備已連接到該網絡,並且您的Node.js服務器已啟動並正在運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM