VnanoMsg

Android Socket 通讯库
授权协议 Apache
开发语言 Kotlin C/C++
所属分类 手机/移动开发、 手机开发包
软件类型 开源软件
地区 国产
投 递 者 荆梓
操作系统 Android
开源组织
适用人群 未知
 软件概览

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")
 	               }
  	          }
  	      }
   	 }
	}
 相关资料
  • $config = [ 'corp_id' => 'xxxxxxxxxxxxxxxxx', 'secret' => 'xxxxxxxxxx', // 通讯录的 secret //... ]; $contacts = Factory::work($config); 成员管理 创建成员 $data = [ "userid" => "overtrue",

  • SPI通讯 OMAP芯片会使用一个串行外围接口,实现一个适合的协议,与V850芯片通讯。这个通讯包括了刷新V850芯片,执行DTC操作和发送CAN信息。实际上,这个通讯是在一个高级别上,通过各种服务实现的。在低级别上,可以通过读取和写入‘/dev/spi3’来实现直接通讯。 不过,似乎没有命令能让OMAP芯片来要求V850将数据字节发送给任意CAN ID。但是,V850内置了一系列的命令ID,多数

  • 主要内容:GWT RPC通讯 介绍,GWT RPC通讯 组件,GWT RPC通讯 示例GWT RPC通讯 介绍 基于 GWT 的应用程序通常由客户端模块和服务器端模块组成。客户端代码在浏览器中运行,服务器端代码在 Web 服务器中运行。客户端代码必须通过网络发出 HTTP 请求才能访问服务器端数据。 RPC,远程过程调用是 GWT 使用的机制,客户端代码可以在其中直接执行服务器端方法。 GWT RPC 是基于 servlet 的。 GWT RPC 是异步的,客户端在通信过程中永远不

  • contacts对象提供对设备通讯录数据库的访问。 方法: contacts.create contacts.find 参数: contactFields contactSuccess contactError contactFindOptions 对象: Contact ContactName ContactField ContactAddress ContactOrganization Con

  • 问题内容: 我已经阅读了本网站上的许多文章,了解如何在Android中接收UDP数据包。但是,这些都不对我有用! 一些基本知识: 我正在3G(不是wifi或其他任何设备)上运行的HTC Incredible(Android 2.2)上进行测试。这里没有仿真器。 我的代码很简单: 我的服务器(在我的PC上运行)正在侦听端口8752上的UDP通信。 我的Android应用程序在一个随机端口上打开一个D

  • 该示例为小程序间的页面通讯,利用 vuex 实现。 在 mpvue框架中使用 vuex 与在 vue 中使用是一样的体验。 1.建立相关的目录结构 2.在 src/main.js 中将 store 挂载到 vue 原型下面 Vue.prototype.$store = store; 3.在页面中通过 mapGetters 和 mapMutations 使用 state methods: {

  • EOSIO智能合约由一组 action 和 type 的定义(definitions)组成.action的定义指定并实现了合约中的行为.type的定义指定了所需的内容及结构.EOSIO的actions主要在基于消息的通讯结构中执行.客户端可以通过发送(推送)信息到nodeos来执行actions.这可以通过使用cleos命令来完成.也可以通过EOSIO的send方法之一来完成(例如:eosio::

  • 为什么使用SpringBoot框架(SpringBoot的优点) 事务失效的场景有哪些 Spring事务是如何实现的 IOC基于什么设计模式 Spring注入的方式有哪些 @Autowrited 和@Resource 注解区别 说说重载重写的定义与区别 操作系统死锁的四个条件 Java是什么传递方式?值传递还有引用传递 如何优化sql 索引失效有哪些 创建线程的方以及区别 UDP和TCP协议的区别