socket.io-java-client和node.js – 握手时出错

我正在尝试开发一个连接到node.js服务器的android应用程序。 这是错误信息:

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(); } } 

任何想法我做错了什么? 如果我在浏览器中inputhttp://192.168.1.107:8881/ ,它会在页面上显示“Hello World”,但是我不能使用socket.io-java-client库进行连接。

首先, 如果你尝试使用socket.io来为你的服务工作一个rest客户端,那么不需要仅仅使用HTTP服务器,你就可以在客户端使用HTTPClient。

假设你使用这个android socket.io客户端Java Socket.io客户端 ,我也一起工作过。

试试这是服务器端套接字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");