【问题标题】:kotlin not supporting Socket IO in androidkotlin 在 android 中不支持 Socket IO
【发布时间】:2018-02-07 07:36:49
【问题描述】:

我有两个问题

1)我的项目包含dagger2,retofit2,kotlin v1.0.21,rxJava2,OkHttp3 我想在我的项目上实现SocketIO 我应该如何实现?

2)我尝试了几种方法但无法连接socketIO所以我尝试在给定代码下面的示例代码但仍然无法连接套接字..请提前帮助thanx

 package com.easymakers.myapplication

import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.app.AppCompatActivity
import android.view.View
import io.socket.client.IO
import io.socket.client.Socket
import io.socket.emitter.Emitter

import kotlinx.android.synthetic.main.activity_main.*
import javax.net.ssl.SSLContext


class MainActivity : AppCompatActivity() {
    private var socket : Socket? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolbar)

        fab.setOnClickListener { view ->

            connect(view)
         //   connect1()
        }
    }

     private fun connect(view : View) {
         val opts = IO.Options()
         opts.port= 5000
         opts.reconnection = false
        // opts.query =
         socket = IO.socket("https://192.170.1.21",opts)
        socket?.connect()
                ?.on(Socket.EVENT_CONNECT, {
                    Snackbar.make(view, "Socket connected", Snackbar.LENGTH_LONG)
                            .setAction("Action", null).show()
                })
                ?.on(Socket.EVENT_DISCONNECT, { println("disconnected") })
    }

    private fun connect1(){
        val sc = SSLContext.getInstance("SSL")
        sc.init(null, null, null)
        val opts = IO.Options()
        opts.port = 3000
        opts.secure = true
        opts.forceNew = true
        opts.reconnection = true
        val  socket = IO.socket("https://103.69.190.10",opts)
        socket.on("connection", Emitter.Listener {
            println("Connected")
            socket.emit("foo", "hi")
            socket.disconnect()
        }).on("event", Emitter.Listener { }).on(Socket.EVENT_DISCONNECT, Emitter.Listener { })
        socket.connect()
    }
}

【问题讨论】:

    标签: android socket.io kotlin


    【解决方案1】:

    我用过这个库Socket.IO

    有了这段代码,OnCreate 方法就足够了。即使使用身份验证令牌,但它是可选的。

    val opts = IO.Options()
        opts.query = "token=XXXXXXXXX"
        var socket = IO.socket("https://MYSERVERSOCKET.com", opts)
    
        socket?.on(Socket.EVENT_CONNECT, {
              Log.d("","==============================CONNECTED")
        })?.on(Socket.EVENT_DISCONNECT, {
              Log.d("","==============================OFF")
        })
    

    开始连接

    btnFindNext.setOnClickListener{
            socket.connect()
    }
    

    还有一个发射的例子

    btnOtro.setOnClickListener{
    
            val obj = JSONObject()
            obj.put("var1", "5ab0a8931522f51fac37f5a1")
            obj.put("var2", "91.8392894")
            obj.put("var3", "-93.8392894")
    
            socket.emit("SendData", obj)
        }
    

    【讨论】:

    • 链接好像失效了。
    【解决方案2】:

    1.1) https://github.com/socketio/socket.io-client-java

    Gradle

    在 build.gradle 中将其添加为 Android Studio 的 gradle 依赖项:

    compile ('io.socket:socket.io-client:1.0.0') {
      // excluding org.json which is provided by Android
      exclude group: 'org.json', module: 'json'
    }
    

    Socket.IO 服务器 1.x 支持

    当前版本的socket.io-client-java 不支持socket.io 服务器 1.x。请改用 socket.io-client-java 0.9.x。

    1.2) 在 github 中你可能会看到: 此链接跟随您到支持 1.x 和更高服务器版本的更新版本。 链接:http://socketio.github.io/socket.io-client-java/project-summary.html

    它有下一个依赖:

    compile 'io.socket:socket.io-client:1.0.0-SNAPSHOT'
    

    2)https://socket.io/get-started/chat/

    下一步你必须启动 node.js 服务器

    集成Socket.IO由两部分组成:

    1) 与 Node.JS HTTP 服务器集成(或安装在其上)的服务器: socket.io

    2) 在浏览器端加载的客户端库: socket.io-client 在开发过程中,socket.io 服务于客户端 自动为我们,正如我们将看到的,所以现在我们只需要安装 一个模块:

    npm install --save socket.io
    

    【讨论】:

    • 只使用那个...忘记在这里添加
    • 感谢重播,我们成功地将它实现到 web 中,(nodejs 没有问题)只有 Android 的问题,我认为这个问题来自 iOS ..你有不同的方法吗?或者我做错了什么
    • 我们已经在 NodeJS 服务器 express 应用上实现了 socket.io 并且在我们的 web 项目中也引用了 socket.io。并且能够连接服务器套接字。但是当我们使用与 kotlin socket.io 客户端相同的方法连接服务器 socket.io 时,客户端和服务器之间没有建立连接。甚至没有在服务器端触发连接事件。
    • 服务器端和客户端有什么版本的socket.io?
    • @Rupesh,我正在回答关于版本的问题,因为“当前版本的 socket.io-client-java 不支持 socket.io server 1.x。请使用 socket.io-client-java 0.9.x 代替。”
    猜你喜欢
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2020-07-07
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多