【问题标题】:Socket.io Android Client not working but iOS Client WorkingSocket.io Android 客户端不工作,但 iOS 客户端工作
【发布时间】:2016-07-07 12:26:52
【问题描述】:

我们在 node.js 服务器中设置了 socket.io。我们尝试使用 Socket.io Java Client 和 Socket.io iOS Client。我们可以通过 iOS 连接,但我们无法通过 Android 连接。我们没有任何线索,为什么 Android 没有连接。

服务器端:

var socketIO = require('socket.io');
//var io =

GLOBAL._io = socketIO(httpServer);
_io.on('connection', (socket) => {
  console.log('Client connected');
  setInterval(() => _io.emit('time', new Date().toTimeString()), 1000);
socket.on('disconnect', () => console.log('Client disconnected'));
});

Android 不工作

public void addSocketConnection() throws URISyntaxException {

        Log.i("Socket.io","Init");

        mSocket = IO.socket("http://dev.myapp.com/parse");
        mSocket.on(Socket.EVENT_CONNECT,onConnect);
        mSocket.on("time",onTime);
        mSocket.on(Socket.EVENT_DISCONNECT,onDisconnect);
        mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);
        mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
        mSocket.connect();

        Log.i("Socket.io","Connect");
    }
    private Emitter.Listener onTime = new Emitter.Listener() {
        @Override
        public void call(Object... args) {

            Log.i("Socket.io","OnTime");

        }
    };

    private Emitter.Listener onConnect = new Emitter.Listener() {
        @Override
        public void call(Object... args) {

            Log.i("Socket.io","OnConnect");

        }
    };

    private Emitter.Listener onDisconnect = new Emitter.Listener() {
        @Override
        public void call(Object... args) {

            Log.i("Socket.io","DisConnect");

        }
    };

iOS 工作

NSURL* url = [[NSURL alloc] initWithString:@"http://dev.myapp.com/parse"];
SocketIOClient* socket = [[SocketIOClient alloc] initWithSocketURL:url options:@{@"log": @YES, @"forcePolling": @YES}];

[socket on:@"connect" callback:^(NSArray* data, SocketAckEmitter* ack) {
    NSLog(@"socket connected");
}];
[socket onAny:^(SocketAnyEvent *event) {
    NSLog(@"On any event :%@",event.event);

}];

[socket on:@"time" callback:^(NSArray* data, SocketAckEmitter* ack) {
    NSLog(@"Time %@",data[0]);
}];

[socket connect];

【问题讨论】:

  • 您是否尝试将 设置为 androidManifest.xml 文件?
  • OP 找到了解决方案并发布到this github issue
  • 是的,我忘了在 StackOverflow 上更新。刚刚添加了答案。

标签: android ios objective-c websocket socket.io


【解决方案1】:

我已经在github上修复更新了,这里忘记更新了。github issue link

有点混乱,但对两者都适用。

我们已经解析服务器 URL:“http://dev.myapp.com/parse” 我们的节点 URL:“http://dev.myapp.com/

我们错误地指向 iOS 的 URL“http://dev.myapp.com/parse”,它正在工作。 所以我们指向 Android 的同一个 URL,它不起作用。

然后我们将两个网址都更改为“http://dev.myapp.com”,现在在 iOS 和 Android 上都可以使用。

注意: 我们不知道为什么 iOS 为“http://dev.myapp.com/parse”工作

【讨论】:

    猜你喜欢
    • 2014-01-13
    • 2013-05-07
    • 1970-01-01
    • 2019-04-04
    • 2019-02-15
    • 2017-08-17
    • 2015-03-04
    • 2013-09-22
    • 1970-01-01
    相关资源
    最近更新 更多