无法从Android socket.io 2客户端连接到node.js socket.io 3.x服务器



我正在尝试在android/kotlin上使用socket.io客户端,并使用节点js套接字io服务器

主要活动:

import io.socket.emitter.Emitter
import io.socket.engineio.client.Socket

override fun onCreate(savedInstanceState: Bundle?) {
//...
val mSocket =  Socket("http://192.168.1.15:3000")
mSocket.on(Socket.EVENT_ERROR, { print("error")})
mSocket.on(Socket.EVENT_OPEN, Emitter.Listener() {
mSocket.emit("mayaCommand", "cmds.polyCube()");
mSocket.close()
print("ok")
)}
mSocket.open()


Socketio库:

implementation 'io.socket:engine.io-client:2.0.0'.

在这个库的github页面上(这里(,2.0.0版本适用于3.x服务器,所以我的nodejssocket.io服务器在3.0.3 上

"socket.io": "3.0.3",
"socket.io-client": "3.0.3"

日志中没有任何内容,只是不起作用,我已经用Wireshark检查了网络数据包,我可以看到一些数据包。

我已经创建了一个network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">http://192.168.1.15</domain>
</domain-config>
</network-security-config> 

我的清单中的链接:

<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:networkSecurityConfig="@xml/network_security_config"
android:usesCleartextTraffic="true"
>

不起作用,什么也没发生。

谢谢

好的,所以今天我重新创建了整个项目,一步一步在我的另一个屏幕上运行wireshark。

破坏:它正在发挥作用。我会详细说明所有步骤,以防另一个人遇到同样的问题。

将其添加到渐变模块文件中:

implementation('io.socket:socket.io-client:2.0.0') {
exclude group: 'org.json', module: 'json'
}

(2.0.0适用于socket.io 3.x服务器(

编辑清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.socketdccs">
<uses-permission android:name="android.permission.INTERNET"  /> <=== add perms
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true" <==== this is important
/...  

我的主要活动:

package com.example.myapp
// ...
import io.socket.client.IO
import io.socket.client.Socket
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {

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

val mSocket = IO.socket("http://192.168.1.15:3000")
mSocket.on(Socket.EVENT_CONNECT, {println("connected")})
testBtn.setOnClickListener {
mSocket.connect()
mSocket.emit("mayaCommand", "cmds.polyCube()")
println("ok")
}
}
}

现在,它运行良好。

谢谢。

最新更新