VnanoMsgAndroid Socket 通讯库

联合创作 · 2023-09-25 02:32

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'
}



核心函数


创建对应的通讯模式




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



绑定地址(服务端)




//绑定地址  地址要写全如上  tcp://加地址
//返回是 bool ture是成功 false是失败
var res = nn.bind("tcp://*:8080")



连接服务端




//连接服务端  地址要写全如上  tcp://加地址
//返回是 bool ture是成功 false是失败
var res = nn.connect("tcp://localhost:8080")



发送数据




//发送数据  String
//返回值:发送的字节数 Int
var res = nn.send("你好")

//发送数据 ByteArray
//返回值:发送的字节数
val msg = "你好"
val bytes = msg.toByteArray()
var res = nn.send(bytes)



接收数据




//接慢数据
//返回值:接收到字符串 String
var res = nn.recv()

//接收数据
//返回值:接收的数据 ByteArray
var res = nn.recvbyte()
val msg = res.toString(charset = Charsets.UTF_8)



设置/取消订阅前缀


==订阅消息只针对PUBSUB模式才有的参数==




//设置订阅前缀
//返回值:大于0成功,小于0失败 Int
var res = nn.subscribe("输入要订阅的主题字符串"

//取消订阅前缀
//返回值:大于0成功,小于0失败 Int
var res = nn.unsubscribe("输入要取消订阅的主题字符串")



特别说明


==执行连接、发送、接收数据时需要加上try catch防止程序崩溃,因为在NDK中接收失败或是发送失败时我都会直接抛出异常来
==




	try {
//发送数据
it?.send(edtinput.text.toString())
//延时50毫秒
Thread.sleep(50)
//接收数据
val recvmsg = it?.recv()
tvmsg.append(recvmsg + "\r\n")
} catch (e: IllegalArgumentException) {
tvmsg.append(e.message.toString() + "\r\n")
}



简单例子


这里用的是REQREP的模式,别的模式就是在创建时设置对应的类即可。




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

//发送按钮
btnSend.setOnClickListener {
nnreqrep.let {
try {
val input = edtinput.text.toString()
val bytes = input.toByteArray()
//发送数据
it?.send(bytes)
//延时50毫秒
Thread.sleep(50)
//接收数据
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")
}
}
}
}
}


浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报