VnanoMsg 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
VnanoMsg 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
VnanoMsg 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
VnanoMsg 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
VnanoMsg 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

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")
 	               }
  	          }
  	      }
   	 }
	}
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表于开发技能专区
2020/03/05 08:24

通讯框架|VNanoMsg的1.0发布

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为2221字,预计阅读6分钟 关于VNano Msg 做这个第三方库主要原因是公司的C#项目中已经开始用NNanoMsg的通讯了,有部分与Android的交互,也想用这种方式实现,搜了一下没有Android关于NanoMsg的开源库,只有原来c的源码,所以自己也是根据NNanoMsg的通讯方式,封装了源码后的通讯,最近这个初版这样出来,可以回看我前面几章关于实现生成这第三方库的心路历程。 NanoMs...

0
0
发表于开发技能专区
2020/03/23 10:36

Android通讯库VNanoMsg的1.0.2发布

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为1147字,预计阅读3分钟 VNanoMsg 介绍 关于VNanoMsg是Android下的Socket的通讯开源库,是NanoMsg的做的一次封装,详细介绍可以看公众号VNanoMsg的相关页面。 NanoMsg地址 微卡智享 https://github.com/Vaccae/VNanoMsg.git 1.0.2版本更新说明 # 更新说明 1 把Nanomsg中原来改的SurVey的参数改了回来,用于解决通讯时接收不全的问题 2 SurVey例子中原来接收后开启的线...

0
0
发表于服务端专区
2020/03/12 09:00

Android通讯库VNanoMsg的1.0.1发布

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为838字,预计阅读3分钟 VNanoMsg 介绍 关于VNanoMsg是Android下的Socket的通讯开源库,是NanoMsg的做的一次封装,详细介绍可以看公众号VNanoMsg的相关页面。 NanoMsg地址 微卡智享 https://github.com/Vaccae/VNanoMsg.git 1.0.1版本更新说明 # 更新说明 1 JNI层的重新封装,新增加了一个NNBaseInf的接口,别的模块调用时都是引用它来实现,减少了很多不必要的代码 2 ...

0
0
发表于开发技能专区
2020/03/05 08:24

NanoMsg框架|Android的各模式通讯封装(不另编译动态库附DEMO地址)

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为8910字,预计阅读9分钟 写在最前 上一篇《 NanoMsg框架|Android中简单封装PAIR的使用(附Demo地址)》已经把NanoMsg的PAIR使用完成了,但是也是一个半成品,后面要完善的多较多,本章我又重新写了一个Android的Demo,一个是自己用的,并且做了一些小的测试,解决了一次测试中的问题后的版本,还未在生产环境下使用,不过也准备开始测试移植了。 重写的原因 微卡智享 ...

0
0
发表于软件架构专区
2020/04/02 09:00

实践|OpenCV4.2使用DNN进行人脸检测二(视频篇)

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为2300字,预计阅读6分钟 前言 前一篇《 实践|OpenCV4.2使用DNN进行人脸检测一(图片篇)》我们已经实现了人脸检测的主要方法,这一篇我们来看看加载视频中实时检测效果,检测来说其实也都是一样的,主要就是把播放的视频每帧通过检测去进行处理,代码我会直接贴出来,这里主要是想说的核心点, Debug和Relese的运行效果差异之大 程序代码 微卡智享 程序代码我们还是上...

0
0
发表于AI & 大数据专区
2020/03/16 09:00

学习|Android中Presentation分屏的简单使用

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为3862字,预计阅读9分钟 分屏异显 做POS销售的朋友应该都知道,现在的很多POS机销售都是两个显示器,对面的那个显示销售的产品和播放广告作用,在Windows中实现其实很简单,直接做一个新的窗体,然后在桌面设置双屏为扩展,显示的时候起始坐标为第一屏的分辨率后开始就可以了,因为现在主要做Android,有可能会用这个方面,所以提前研究了一下,做了个简单的小显示,没...

0
0
发表于服务端专区
2020/03/19 09:00

学习|C++线程与指针结合的小例子

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为1829字,预计阅读5分钟 前言 C++11后在线程这块已经有了thread的类了,如果简单的std::thread可以直接就实现线程的操作,就要我们在开发过程中,很简单的线程可以直接用std::thread就可以了,今天我的小例子用的是std::async,他里面thread的都能实现,而且还能实现一些更多的方法 std::async简单用法 微卡智享 其实这个用法网上可以找到一大堆,这里我就简单说一下就...

0
0
发表于开发技能专区
2020/03/30 09:00

实践|OpenCV4.2使用DNN进行人脸检测一(图片篇)

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为4829字,预计阅读9分钟 OpenCV DNN人脸检测 使用OpenCV进行人脸检测我写过两篇文章《 C++ OpenCV之级联分类器--人脸检测》和《 Android NDK OpenCV级联方式实时进行人脸检测》,不过这两篇里面用到的检测方式都是HAAR级联检测器,现在OpenCV4里面官方支持的人脸检测方法也已经是基于深度学习的方法进行检测了,所以我们这篇主要就是看OpenCV下用DNN进行人脸检测。 DN...

0
0
发表于AI & 大数据专区
2020/03/26 09:00

学习|Android中JetPack中的几个组件简单使用

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为2716字,预计阅读8分钟 Android JetPack Android JetPack是一整套的库,工具和指南。可帮助开发者更轻松地编写优质应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的代码上。 说起来Google对JetPack也是非常的重视,从它的官方主页也可以看出来JetPack在首页上就有一个导航栏了。 整个JetPack中东西也是很...

0
0
发表于服务端专区
2020/03/09 09:00

学习|Android制作开源库

学更好的别人, 做更好的自己。 ——《微卡智 本文长度为2313字,预计阅读7分钟 前言 前几篇针对NanoMsg的使用做了一个小结,后台最后我们写了一个VNanoMsg的项目,放到了GitHub上,本来想生产环境使用直接引入Module进行处理即可,忍不住的又想看看我们平时用的第三方开源库那种方便的用法,于是研究了一下制作开源库的方法,这里做一个学习笔记 必备条件 想到制作开源库的必备条件是要有一个 GitHub的账号,常看过我文章的朋友...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
3 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部