我正在尝试在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")
}
}
}
现在,它运行良好。
谢谢。