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' }
核心函数
创建对应的通讯模式
//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") } } } } }
评论
中国人民大学《大语言模型》书籍中文版开放下载!还配套代码工具库~
大语言模型综述文章《A Survey of Large Language Models》团队终于出书啦!而且是中文版——《大语言模型》!这本书整理呈现了大模型技术框架和路线图,是一本非常好的入门书籍。🧿🧿🧿
此外,官方不仅发布了电子版 PDF 下载链接,还提供了配套资源。点赞 👍图书下载 → [大
机器学习算法与Python实战
0
推荐 | 文本分析库cntext2.x使用手册
Tips: 公众号推送后内容只能更改一次,且只能改20字符。 如果内容出问题,或者想更新内容, 只能重复推送。 为了更好的阅读体验,建议阅读本文博客版, 链接地址https://textdata.cn/blog/2024-04-27-cntext2x-usage-tutorial/cntext是大邓
大邓和他的Python
1
强烈推荐一款好用到爆的可视化拖拽库
大厂技术 高级前端 Node进阶点击上方 程序员成长指北,关注公众号回复1,加入高级Node交流群今天给大家推荐这款拖拽组件VueDraggablePlus,试了一下非常不错,据说还被尤雨溪推荐过,咱们国人自己开发的,中国人不骗🇨🇳人,我就再来推
程序员成长指北
2
【Python】coverage,一个有趣的 Python 库!
大家好,今天为大家分享一个有趣的 Python 库 - coveragepy。Github地址:https://github.com/nedbat/coveragepy在软件开发中,测试是确保代码质量和稳定性的关键步骤之一。而代码覆盖率则是衡量测试覆盖代码的程度的重要指标之一。Python cove
机器学习初学者
0
顶级 Javaer 都在用的 20 个类库,真香!
点击关注公众号,Java 干货及时推送↓推荐阅读:投了 100 多份简历后…优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解,包括JDK和第三方库。我花了很多时间来学习API,尤其是在阅读了Effective Java 3rd Edition之后 ,Joshua Bloch建
Java技术栈
1
delorean,一个超级实用的 Python 库!
作者通常周更,为了不错过更新,请点击上方“Python碎片”,“星标”公众号大家好,今天为大家分享一个超级实用的 Python 库 - delorean。Github地址:https://github.com/myusuf3/delorean/时间在计算机科学和软件开发中是一个至关重要的概念。Pyt
Python 碎片
0
CleverCSV,一个神奇的 python 库!
我的小册:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。来源丨网络介绍CleverCSV 是一个基于 Python 的库,旨在提供比标准库 csv 更智能和灵活的方法来处理 CSV 文件。该库使用机器学习算法来探测 CSV 文件的正确拨号结构,从而
菜鸟学Python
0
.NET 开源工具库,集成超过1000个扩展方法
前言推荐一个.NET 开源项目,集成了超过1000个扩展方法。项目简介Z.ExtensionMethods是由zzzprojects公司开发并维护的一款开源库,为.NET开发人员提供一系列实用的扩展方法,可以减少重复劳动、提高开发效率,支持.NET Framework 和 .NET Core。该项目
dotNET全栈开发
10