VnanoMsgAndroid Socket 通訊庫
VNanoMsg是Android下的Socket通訊庫,對NanoMsg的二次封裝,仿照NNanoMsg的第三方開源庫。
使用方法
添加依賴項
在build.gradle中加入VNanoMsg的引用
android {
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
}
dependencies {
implementation 'com.github.Vaccae:VNanoMsg:1.0.3'
}
核心函數(shù)
創(chuàng)建對應(yīng)的通訊模式
//PAIR通訊模式 var nn = NNPAIR() //BUS通訊模式 var nn = NNBUS() //REQREP模式 var nn = NNREQREP() //PUBSUB模式 var nn = NNPUBSUB() //SURVEY模式 var nn = NNSURVEY() //PipeLine中的Push模式 var nn - NNPIPEPUSH() //PipeLine中的Pull模式 var nn - NNPIPEPULL()
綁定地址(服務(wù)端)
//綁定地址 地址要寫全如上 tcp://加地址 //返回是 bool ture是成功 false是失敗 var res = nn.bind("tcp://*:8080")
連接服務(wù)端
//連接服務(wù)端 地址要寫全如上 tcp://加地址 //返回是 bool ture是成功 false是失敗 var res = nn.connect("tcp://localhost:8080")
發(fā)送數(shù)據(jù)
//發(fā)送數(shù)據(jù) String //返回值:發(fā)送的字節(jié)數(shù) Int var res = nn.send("你好") //發(fā)送數(shù)據(jù) ByteArray //返回值:發(fā)送的字節(jié)數(shù) val msg = "你好" val bytes = msg.toByteArray() var res = nn.send(bytes)
接收數(shù)據(jù)
//接慢數(shù)據(jù) //返回值:接收到字符串 String var res = nn.recv() //接收數(shù)據(jù) //返回值:接收的數(shù)據(jù) ByteArray var res = nn.recvbyte() val msg = res.toString(charset = Charsets.UTF_8)
設(shè)置/取消訂閱前綴
==訂閱消息只針對PUBSUB模式才有的參數(shù)==
//設(shè)置訂閱前綴 //返回值:大于0成功,小于0失敗 Int var res = nn.subscribe("輸入要訂閱的主題字符串") //取消訂閱前綴 //返回值:大于0成功,小于0失敗 Int var res = nn.unsubscribe("輸入要取消訂閱的主題字符串")
特別說明
==執(zhí)行連接、發(fā)送、接收數(shù)據(jù)時需要加上try catch防止程序崩潰,因為在NDK中接收失敗或是發(fā)送失敗時我都會直接拋出異常來
==
try {
//發(fā)送數(shù)據(jù)
it?.send(edtinput.text.toString())
//延時50毫秒
Thread.sleep(50)
//接收數(shù)據(jù)
val recvmsg = it?.recv()
tvmsg.append(recvmsg + "\r\n")
} catch (e: IllegalArgumentException) {
tvmsg.append(e.message.toString() + "\r\n")
}
簡單例子
這里用的是REQREP的模式,別的模式就是在創(chuàng)建時設(shè)置對應(yīng)的類即可。
class REQREPActivity : AppCompatActivity() {
private var nnreqrep: NNREQREP? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_reqrep)
//連接按鈕
btnConnent.setOnClickListener {
if (nnreqrep == null) {
nnreqrep = NNREQREP()
}
nnreqrep.let {
try {
if (it?.connect(edtipadr.text.toString())!!) {
tvmsg.append("REQREP連接成功!\r\n")
} else {
tvmsg.append("REQREP連接失敗!\r\n")
}
} catch (e: IllegalArgumentException) {
tvmsg.append(e.message.toString() + "\r\n")
}
}
}
//發(fā)送按鈕
btnSend.setOnClickListener {
nnreqrep.let {
try {
val input = edtinput.text.toString()
val bytes = input.toByteArray()
//發(fā)送數(shù)據(jù)
it?.send(bytes)
//延時50毫秒
Thread.sleep(50)
//接收數(shù)據(jù)
val recvbyte = it?.recvbyte()
val recvmsg = recvbyte?.toString(charset = Charsets.UTF_8)
tvmsg.append(recvmsg + "\r\n")
} catch (e: IllegalArgumentException) {
tvmsg.append(e.message.toString() + "\r\n")
}
}
}
}
}
評論
圖片
表情
