我正在尝试将简单节点js (socket.io)服务器与我的android应用程序通信,我使用Gottox socket.io-java-client lib作为客户端,但它总是返回错误(当握手文件未找到时出错),我使用wifi在本地网络上测试该应用程序,我的ip是192.168.1.69,我已经通过web测试了服务器通信,运行良好。
节点js套接字服务器代码
var mongo = require('mongodb').MongoClient,
    Client = require('socket.io').listen(8080).sockets;
    mongo.connect('mongodb://192.168.1.69/chat',function(err, db){
            if(err) throw err;
            Client.on('connection',function(socket){
                    //get mongo db collection
                    console.log("Connected to server");
                    var col = db.collection("messages"),
                    sendStatus = function(s){
                            socket.emit('status',s);
                        };
                    //emit all messages
                    col.find().limit(100).sort({_id:1}).toArray(function(err, res){
                            if(err) throw err;
                            socket.emit("output",res);
                        }); 
                    //wait for input
                    socket.on('input',function(data){
                            console.log("data-------> name: "+data.name+" message: "+data.message);
                            //insert into mongodb server
                            //json data from client
                            var name = data.name,
                                message = data.message,
                                whitespacePattern = /^\s*$/;
                                if(whitespacePattern.test(name) || whitespacePattern.test(message)){
                                    sendStatus("Name and Message is required.");
                                    console.log("invalid data");
                                }else{
                                      col.insert({name: name,message:message},function(){
                                          //emit latest to all clients 
                                          Client.emit('output',[data]);
                                        sendStatus({
                                                message:"message sent",
                                                clear:true
                                            });
                                      });                                            
                                    }
                        //on input
                        });
                //on connection
                });
        //mongo db connect
        });安卓客户端的代码
package com.example.socketio;
import java.net.MalformedURLException;
import org.json.JSONObject;
import io.socket.IOAcknowledge;
import io.socket.IOCallback;
import io.socket.SocketIO;
import io.socket.SocketIOException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity  {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = (Button) findViewById(R.id.button1);
        final TextView text = (TextView) findViewById(R.id.textView2);
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                try {
                    SocketIO socket = new SocketIO("http://192.168.1.69:8080");
                    socket.connect(new IOCallback() {
                        @Override
                        public void onMessage(JSONObject arg0, IOAcknowledge arg1) {
                            // TODO Auto-generated method stub
                        }
                        @Override
                        public void onMessage(String arg0, IOAcknowledge arg1) {
                            // TODO Auto-generated method stub
                        }
                        @Override
                        public void onError(SocketIOException arg0) {
                            // TODO Auto-generated method stub
                            arg0.printStackTrace();
                        }
                        @Override
                        public void onDisconnect() {
                            // TODO Auto-generated method stub
                        }
                        @Override
                        public void onConnect() {
                            // TODO Auto-generated method stub
                        }
                        @Override
                        public void on(String arg0, IOAcknowledge arg1, Object... arg2) {
                            // TODO Auto-generated method stub
                        }
                    });
                socket.emit("input", "hello");  
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }
}错误:
06-07 11:05:35.414: W/System.err(26605): io.socket.SocketIOException: Error while handshaking
06-07 11:05:35.414: W/System.err(26605):    at io.socket.IOConnection.handshake(IOConnection.java:322)
06-07 11:05:35.414: W/System.err(26605):    at io.socket.IOConnection.access$600(IOConnection.java:39)
06-07 11:05:35.424: W/System.err(26605):    at io.socket.IOConnection$ConnectThread.run(IOConnection.java:199)
06-07 11:05:35.424: W/System.err(26605): Caused by: java.io.FileNotFoundException: http://192.168.1.69:8080/socket.io/1/
06-07 11:05:35.424: W/System.err(26605):    at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186)
06-07 11:05:35.424: W/System.err(26605):    at io.socket.IOConnection.handshake(IOConnection.java:313)
06-07 11:05:35.424: W/System.err(26605):    ... 2 more发布于 2014-06-10 08:58:52
问题解决(某种程度上),这里:Android developpement, Gottox socket.io-java-client: file not fount Exception /socket.io/1/
(尝试使用socket.io的早期版本-首先从node_modules中删除socket.io文件夹,然后使用以下命令安装旧版本,例如0.9.16 :NPMInstallSocket.IO@0.9.16)
发布于 2014-07-31 06:53:48
使用这个新库在Java上使用socket.io 1.0
https://github.com/nkzawa/socket.io-client.java/blob/master/README.md
https://stackoverflow.com/questions/24081179
复制相似问题