<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          VnanoMsgAndroid Socket 通訊庫

          聯(lián)合創(chuàng)作 · 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'
          	}

          核心函數(shù)

          創(chuàng)建對應(yīng)的通訊模式

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

          綁定地址(服務(wù)端)

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

          連接服務(wù)端

          //連接服務(wù)端  地址要寫全如上  tcp://加地址
          //返回是 bool  ture是成功  false是失敗
          var res = nn.connect("tcp://localhost:8080")

          發(fā)送數(shù)據(jù)

          //發(fā)送數(shù)據(jù)  String
          //返回值:發(fā)送的字節(jié)數(shù) Int
          var res = nn.send("你好")
          
          //發(fā)送數(shù)據(jù)  ByteArray
          //返回值:發(fā)送的字節(jié)數(shù)
          val msg = "你好"
          val bytes = msg.toByteArray()
          var res = nn.send(bytes)

          接收數(shù)據(jù)

          //接慢數(shù)據(jù)
          //返回值:接收到字符串 String
          var res = nn.recv()
          
          //接收數(shù)據(jù)  
          //返回值:接收的數(shù)據(jù) ByteArray
          var res = nn.recvbyte()
          val msg = res.toString(charset = Charsets.UTF_8)

          設(shè)置/取消訂閱前綴

          ==訂閱消息只針對PUBSUB模式才有的參數(shù)==

          //設(shè)置訂閱前綴
          //返回值:大于0成功,小于0失敗 Int
          var res = nn.subscribe("輸入要訂閱的主題字符串"
              
          //取消訂閱前綴
          //返回值:大于0成功,小于0失敗 Int
          var res = nn.unsubscribe("輸入要取消訂閱的主題字符串")

          特別說明

          ==執(zhí)行連接、發(fā)送、接收數(shù)據(jù)時需要加上try catch防止程序崩潰,因為在NDK中接收失敗或是發(fā)送失敗時我都會直接拋出異常來
          ==

          	try {
          	  //發(fā)送數(shù)據(jù)
          	  it?.send(edtinput.text.toString())
          	  //延時50毫秒
          	  Thread.sleep(50)
          	  //接收數(shù)據(jù)
          	  val recvmsg = it?.recv()
          	  tvmsg.append(recvmsg + "\r\n")
          	} catch (e: IllegalArgumentException) {
          	  tvmsg.append(e.message.toString() + "\r\n")
          	}

          簡單例子

          這里用的是REQREP的模式,別的模式就是在創(chuàng)建時設(shè)置對應(yīng)的類即可。

          	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")
             	             }
             	         }
             	     }
          				 	
                	  //發(fā)送按鈕
            	      btnSend.setOnClickListener {
             	         nnreqrep.let {
             	             try {
             	                 val input = edtinput.text.toString()
             	                 val bytes = input.toByteArray()
             	                 //發(fā)送數(shù)據(jù)
             	                 it?.send(bytes)
             	                 //延時50毫秒
             	                 Thread.sleep(50)
             	                 //接收數(shù)據(jù)
             	                 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
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  韩国三级精品 | 亚洲综合13p | AAAAAA免费视频 | 亚洲欧洲视频在线观看 | 亚洲AV黄片 |