简体   繁体   English

如何使用SocketIO将Android Client与Node.js服务器连接?

[英]How to connect Android Client with Node.js server using SocketIO?

I am trying to connect with Node.js from Android Client using SocketIO but i am facing SocketTimeOutException in the Logcat. 我正在尝试使用SocketIO从Android客户端连接到Node.js,但我在Logcat中面临SocketTimeOutException。

MyCode: mycode的:

MainActivity.java MainActivity.java

package com.example.androidtestclient;

import io.socket.IOAcknowledge;
import io.socket.IOCallback;
import io.socket.SocketIO;
import io.socket.SocketIOException;

import java.net.MalformedURLException;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

try {
    SocketIO socket = new SocketIO("http://10.42.0.32:3000/");


    socket.connect(new IOCallback() {
        @Override
        public void onMessage(JSONObject json, IOAcknowledge ack) {
            try {
                System.out.println("Server said:" + json.toString(2));
                // display("Connectet  and " + json.toString(2));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onMessage(String data, IOAcknowledge ack) {
            System.out.println("Server said: " + data);
            // display("Connectet  and " + data);
        }

        @Override
        public void onError(SocketIOException socketIOException) {
            System.out.println("an Error occured");
            Log.d("error", "an error occured");
            // display("not Connectet == error occured ");
            socketIOException.printStackTrace();
        }

        @Override
        public void onDisconnect() {
            System.out.println("Connection terminated.");
            Log.e("disconnect", "Connection terminated");
            // display("disConnectet ");
        }

        @Override
        public void onConnect() {
            System.out.println("Connection established");
            Log.v("connect", "Connection established");
            // display("Connectet  and done");
        }

        @Override
        public void on(String event, IOAcknowledge ack, Object... args) {
            System.out
                    .println("Server triggered event '" + event + "'");
            Log.v("ON", "Server triggered event '" + event + "'");
            // display("Connectet  and " + event);
        }
    });

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

} }

Node.js Code Node.js代码

var http = require('http');
var io   = require('socket.io');
var app = http.createServer();

app.listen(3000);

console.log('Server running at http://127.0.0.1:3000/');

Exception: 例外:

12-07 15:28:53.396: W/System.err(4141): io.socket.SocketIOException: Error while handshaking
12-07 15:28:53.396: W/System.err(4141):     at io.socket.IOConnection.handshake(IOConnection.java:322)
12-07 15:28:53.396: W/System.err(4141):     at io.socket.IOConnection.access$7(IOConnection.java:292)
12-07 15:28:53.396: W/System.err(4141):     at io.socket.IOConnection$ConnectThread.run(IOConnection.java:199)
12-07 15:28:53.396: W/System.err(4141): Caused by: java.net.SocketTimeoutException
12-07 15:28:53.396: W/System.err(4141):     at java.net.PlainSocketImpl.read(PlainSocketImpl.java:491)
12-07 15:28:53.396: W/System.err(4141):     at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
12-07 15:28:53.396: W/System.err(4141):     at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
12-07 15:28:53.396: W/System.err(4141):     at java.io.InputStream.read(InputStream.java:163)
12-07 15:28:53.396: W/System.err(4141):     at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:142)
12-07 15:28:53.396: W/System.err(4141):     at java.io.BufferedInputStream.read(BufferedInputStream.java:227)
12-07 15:28:53.396: W/System.err(4141):     at libcore.io.Streams.readAsciiLine(Streams.java:201)
12-07 15:28:53.396: W/System.err(4141):     at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:547)
12-07 15:28:53.396: W/System.err(4141):     at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:787)
12-07 15:28:53.396: W/System.err(4141):     at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)
12-07 15:28:53.396: W/System.err(4141):     at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
12-07 15:28:53.396: W/System.err(4141):     at io.socket.IOConnection.handshake(IOConnection.java:313)
12-07 15:28:53.396: W/System.err(4141):     ... 2 more

In the browser , i am able connect with localhost:3000 but facing issue in Android Client. 在浏览器中,我能够与localhost:3000连接,但在Android Client中遇到问题。 I have also given my system IP address in the app. 我还在应用程序中提供了我的系统IP地址。

Please suggest me some solution and please let me know. 请提出一些解决方案,并告诉我。

the problem is your client is not supporting socket.io v1.0.x and your are using socket.io v1.0 in server side. 问题是您的客户端不支持socket.io v1.0.x,并且您在服务器端使用了socket.io v1.0。 you should downgrade your socket.io version on your server or change your library and use another one that supports v1 if you are using android studio , you can use this but if you are using eclipse, I don't know any library supporting socket.io v1 如果您使用的是android studio,则应在服务器上降级socket.io版本或更改库并使用另一个支持v1的库,可以使用此版本,但是如果使用eclipse,我不知道任何支持套接字的库。 io v1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM