带有查询字符串参数的 AndroidAsync socket.io 连接

Posted

技术标签:

【中文标题】带有查询字符串参数的 AndroidAsync socket.io 连接【英文标题】:AndroidAsync socket.io connection with querystring parameters 【发布时间】:2014-03-01 11:24:46 【问题描述】:

几天来,我一直在使用带有 android 的 socket.io。截至目前,我正在使用 Koush 的 AndroidAsync。当我尝试连接到我的本地 socket.io 服务器 (http://192.168.2.1:3000) 时,一切正常,我可以发出命令并接收事件消息。但是当我尝试将它用于带有查询字符串参数的实时服务器(http://api.mysite.com:8000/socket.io/1?v=1&name=xxx&password=xxx)时,我无法连接。 是否有将查询字符串参数传递给 AndroidAsync socket.io 的正确方法?这是我的代码。

    Uri.Builder b = Uri.parse("http://api.mysite.com:8000/socket.io/1").buildUpon();
    b.appendQueryParameter("v", "1");
    b.appendQueryParameter("name", "xxx");
    b.appendQueryParameter("pass", "xxx");

    myUrl = b.build().toString();

    AsyncHttpClient.getDefaultInstance().getString(myUrl, new AsyncHttpClient.StringCallback() 

            @Override
            public void onCompleted(Exception arg0, AsyncHttpResponse arg1, String arg2) 
                // TODO Auto-generated method stub

            

            @Override
            public void onConnect(AsyncHttpResponse response) 
                // TODO Auto-generated method stub
                super.onConnect(response);
                Log.d("tag","onConnect!");
            

            @Override
            public void onProgress(AsyncHttpResponse response, int downloaded,
                    int total) 
                // TODO Auto-generated method stub
                super.onProgress(response, downloaded, total);
                Log.d("tag","Progress!");
            


        );

        SocketIOClient.connect(AsyncHttpClient.getDefaultInstance(), myUrl, new ConnectCallback() 

            @Override
            public void onConnectCompleted(Exception arg0, SocketIOClient client) 
                // TODO Auto-generated method stub
                if (client.isConnected()) 
                    Log.d("tag","!");
                 else 
                    Log.d("tag","?");
                


            
        );

【问题讨论】:

“我无法连接。”意味着你甚至不能建立套接字,你可以建立但你不能读取,它给出了超时......? 我认为根本没有联系。因为在 SocketIOClient.connect 上,我正在检查 client.isConnected 但总是返回 false。 127.0.0.1 更改为api.mysite.com 似乎您不再使用您的局域网并且您正在使用互联网连接到该服务器,我错了吗?还是您有本地 DNS 服务将该主机解析为本地 IP 地址? 它实际上是通过互联网提供的。 您是否检查过您的路由器是否打开了 8000 端口并重定向到正确的本地设备? 【参考方案1】:

我在他的其他库 android-websockets 中发现了同样的问题。我帮助他在他的两个项目中修复它。查看对AndroidAsync 和android-websockets 所做的更改。 android-websockets 的链接详细描述了该问题。我建议您从 master 分支中提取最新的更改,然后重试。

【讨论】:

您确实在其中提到了使用 Uri.builder,我在我的问题中这样做是否正确,或者是否有其他方法可以在 AndroidAsync 中设置查询参数或添加标头(而不是使用查询参数)? @jeraldov 您的方法调用是正确的,它只是在 AndroidAsync 库中,由于不使用 Uri.Builder 导致 url 被搞砸了。 哇。您的回答确实将我连接到我的服务器。非常感谢!但我希望你的帮助不会到此结束。我们有机会讨论更多关于 Socket.IO 和 Android 的信息吗?我想再问几个关于 AndroidAsync 的问题。 当然。来这个房间和我聊天chat.***.com/rooms/47308/socket-io-android 嗨@Rahul,你知道Android-websockets是否会在断开/超时时自动连接吗?

以上是关于带有查询字符串参数的 AndroidAsync socket.io 连接的主要内容,如果未能解决你的问题,请参考以下文章

如何在带有参数的 s-s-rS 查询设计器中使用 IF ELSE 语句?

带有 ODBC 连接的 s-s-rS 参数基础知识

带有 Condition 和 s-s-rS 参数的 Select 语句

带有查询字符串参数的 Rails 动作缓存

Frida + AndroidAsync 实现 RPC

查询返回带有错误参数的 sql 字符串