VnanoMsg 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
VnanoMsg 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
VnanoMsg 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 Apache
开发语言 Kotlin C/C++
操作系统 Android
软件类型 开源软件
开源组织
地区 国产
投 递 者 Vaccae
适用人群 未知
收录时间 2020-12-16

软件简介

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 指数为
超过 的项目

评论

点击引领话题📣 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
0 评论
4 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部