2013-04-28 55 views
2

我正在嘗試開發一個將連接到node.js服務器的android應用程序。下面是錯誤信息:socket.io-java-client和node.js - 握手時出錯

04-28 14:24:52.250: W/System.err(811): io.socket.SocketIOException: Error while handshaking 
04-28 14:24:52.250: W/System.err(811): at io.socket.IOConnection.handshake(IOConnection.java:322) 
04-28 14:24:52.259: W/System.err(811): at io.socket.IOConnection.access$600(IOConnection.java:39) 
04-28 14:24:52.259: W/System.err(811): at io.socket.IOConnection$ConnectThread.run(IOConnection.java:199) 
04-28 14:24:52.259: W/System.err(811): Caused by: java.lang.ArrayIndexOutOfBoundsException 
04-28 14:24:52.306: W/System.err(811): at io.socket.IOConnection.handshake(IOConnection.java:318) 
04-28 14:24:52.306: W/System.err(811): ... 2 more 

服務器:

var http = require('http'); 
    http.createServer(function (req, res) { 
     res.writeHead(200, {'Content-Type': 'text/plain'}); 
     res.end('Hello World\n'); 
    }).listen(8881, '192.168.1.107'); 
    console.log('Server running at http://192.168.1.107:8881/'); 

客戶:

public class RestClientActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     try { 
      SocketIO socket = new SocketIO("http://192.168.1.107:8881/"); 
      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 + "'"); 
       } 
      }); 

      // This line is cached until the connection is establisched. 
      socket.send("Hello Server!"); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

任何想法我做錯了嗎?如果我在瀏覽器中輸入http://192.168.1.107:8881/,它會在頁面上顯示「Hello World」,但我無法使用socket.io-java-client庫進行連接。

+0

,在那裏你創建HTTP服務器的基本的例子,您不配置'socket.io'聽那個http服務器的IP:PORT,是那個完整的代碼? – Gntem 2013-04-28 15:04:42

+0

是的,這是完整的代碼 - 對不起,這個話題是我的新東西。 – 2013-04-28 15:19:03

+0

你知道我可以用來連接服務器的庫嗎? – 2013-04-28 15:24:52

回答

2

首先IF你嘗試去解決一個REST客戶端使用socket.io您的服務是沒有必要的只是堅持與HTTP服務器,你會被罰款,在客戶端使用了HTTPClient ..

假設你使用這個android socket.io客戶端Java Socket.io client 我也一起工作過。

試試這個服務器端套接字IO腳本是LearnBoost/socket.io

var server = require('http').Server(); 
var io = require('socket.io')(server); 
io.on('connection', function(socket){ 
    socket.on('message', function(data){ 
    console.log("Received message : "+data); 
    socket.emit("message","echoing back : "+data); 
    }); 
    socket.on('disconnect', function(){ 
    // client disconnected 
    }); 
}); 
server.listen(8881,"192.168.1.107"); 
在服務器端