kotlin在android中不支持Socket IO

时间:2018-02-07 07:36:49

标签: android socket.io kotlin

我有两个问题

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()
    }
}

2 个答案:

答案 0 :(得分:2)

我使用了这个库Socket.IO-client.java

使用此代码就足够了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)
    }

答案 1 :(得分:1)

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

<强>摇篮

在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 Server 1.x suppport

     

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

1.2)在github中你可能会看到:enter image description here 此链接将跟随您到支持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 Server集成(或安装)的服务器:   socket.io

     

2)在浏览器端加载的客户端库:   socket.io-client在开发期间,socket.io为客户端提供服务   我们会自动为我们看到,所以现在我们只需要安装   一个模块:

npm install --save socket.io