色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS 網(wǎng)絡管理開發(fā) —Socket 連接

王程 ? 來源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-18 09:20 ? 次閱讀

簡介

Socket 連接主要是通過 Socket 進行數(shù)據(jù)傳輸,支持 TCP/UDP/TLS 協(xié)議。

基本概念

? ● Socket:套接字,就是對網(wǎng)絡中不同主機上的應用進程之間進行雙向通信的端點的抽象。

? ● TCP:傳輸控制協(xié)議 (Transmission Control Protocol)。是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。

? ● UDP:用戶數(shù)據(jù)報協(xié)議協(xié)議 (User Datagram Protocol)。是一個簡單的面向消息的傳輸層,不需要連接。

? ● TLS:安全傳輸層協(xié)議 (Transport Layer Security)。用于在兩個通信應用程序之間提供保密性和數(shù)據(jù)完整性。

場景介紹

應用通過 Socket 進行數(shù)據(jù)傳輸,支持 TCP/UDP/TLS 協(xié)議。主要場景有:

? ● 應用通過 TCP/UDP Socket 進行數(shù)據(jù)傳輸

? ● 應用通過 TLS Socket 進行加密數(shù)據(jù)傳輸

接口說明

完整的 JS API 說明以及實例代碼請參考:Socket 連接。

Socket 連接主要由 socket 模塊提供。具體接口說明如下表。

接口名 功能描述
constructUDPSocketInstance() 創(chuàng)建一個 UDPSocket 對象。
constructTCPSocketInstance() 創(chuàng)建一個 TCPSocket 對象。
bind() 綁定 IP 地址和端口
send() 發(fā)送數(shù)據(jù)。
close() 關閉連接。
getState() 獲取 Socket 狀態(tài)。
connect() 連接到指定的 IP 地址和端口(僅 TCP 支持)
getRemoteAddress() 獲取對端 Socket 地址(僅 TCP 支持,需要先調(diào)用 connect 方法)
on(type: ‘message’) 訂閱 Socket 連接的接收消息事件。
off(type: ‘message’) 取消訂閱 Socket 連接的接收消息事件。
on(type: ‘close’) 訂閱 Socket 連接的關閉事件。
off(type: ‘close’) 取消訂閱 Socket 連接的關閉事件。
on(type: ‘error’) 訂閱 Socket 連接的 Error 事件。
off(type: ‘error’) 取消訂閱 Socket 連接的 Error 事件。
on(type: ‘listening’) 訂閱 UDPSocket 連接的數(shù)據(jù)包消息事件(僅 UDP 支持)。
off(type: ‘listening’) 取消訂閱 UDPSocket 連接的數(shù)據(jù)包消息事件(僅 UDP 支持)。
on(type: ‘connect’) 訂閱 TCPSocket 的連接事件(僅 TCP 支持)。
off(type: ‘connect’) 取消訂閱 TCPSocket 的連接事件(僅 TCP 支持)。

TLS Socket 連接主要由 tls_socket 模塊提供。具體接口說明如下表。

接口名 功能描述
constructTLSSocketInstance() 創(chuàng)建一個 TLSSocket 對象。
bind() 綁定 IP 地址和端口號。
close(type: ‘error’) 關閉連接。
connect() 連接到指定的 IP 地址和端口。
getCertificate() 返回表示本地證書的對象。
getCipherSuite() 返回包含協(xié)商的密碼套件信息的列表。
getProtocol() 返回包含當前連接協(xié)商的 SSL/TLS 協(xié)議版本的字符串。
getRemoteAddress() 獲取 TLSSocket 連接的對端地址。
getRemoteCertificate() 返回表示對等證書的對象。
getSignatureAlgorithms() 在服務器和客戶端之間共享的簽名算法列表,按優(yōu)先級降序排列。
getState() 獲取 TLSSocket 連接的狀態(tài)。
off(type: ‘close’) 取消訂閱 TLSSocket 連接的關閉事件。
off(type: ‘error’) 取消訂閱 TLSSocket 連接的 Error 事件。
off(type: ‘message’) 取消訂閱 TLSSocket 連接的接收消息事件。
on(type: ‘close’) 訂閱 TLSSocket 連接的關閉事件。
on(type: ‘error’) 訂閱 TLSSocket 連接的 Error 事件。
on(type: ‘message’) 訂閱 TLSSocket 連接的接收消息事件。
send() 發(fā)送數(shù)據(jù)。
setExtraOptions() 設置 TLSSocket 連接的其他屬性。

應用 TCP/UDP 協(xié)議進行通信

UDP 與 TCP 流程大體類似,下面以 TCP 為例:

? 1. import 需要的 socket 模塊。

? 2. 創(chuàng)建一個 TCPSocket 連接,返回一個 TCPSocket 對象。

? 3. (可選)訂閱 TCPSocket 相關的訂閱事件。

? 4. 綁定 IP 地址和端口,端口可以指定或由系統(tǒng)隨機分配。

? 5. 連接到指定的 IP 地址和端口。

? 6. 發(fā)送數(shù)據(jù)。

? 7. Socket 連接使用完畢后,主動關閉。

import socket from '@ohos.net.socket'

// 創(chuàng)建一個TCPSocket連接,返回一個TCPSocket對象。
let tcp = socket.constructTCPSocketInstance();

// 訂閱TCPSocket相關的訂閱事件
tcp.on('message', value => {
  console.log("on message")
  let buffer = value.message
  let dataView = new DataView(buffer)
  let str = ""
  for (let i = 0; i < dataView.byteLength; ++i) {
    str += String.fromCharCode(dataView.getUint8(i))
  }
  console.log("on connect received:" + str)
});
tcp.on('connect', () =?> {
  console.log("on connect")
});
tcp.on('close', () => {
  console.log("on close")
});

// 綁定IP地址和端口。
let bindAddress = {
  address: '192.168.xx.xx',
  port: 1234, // 綁定端口,如1234
  family: 1
};
tcp.bind(bindAddress, err => {
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
  // 連接到指定的IP地址和端口。
  let connectAddress = {
    address: '192.168.xx.xx',
    port: 5678, // 連接端口,如5678
    family: 1
  };
  tcp.connect({
    address: connectAddress, timeout: 6000
  }, err => {
    if (err) {
      console.log('connect fail');
      return;
    }
    console.log('connect success');
    // 發(fā)送數(shù)據(jù)
    tcp.send({
      data: 'Hello, server!'
    }, err => {
      if (err) {
        console.log('send fail');
        return;
      }
      console.log('send success');
    })
  });
});
// 連接使用完畢后,主動關閉。取消相關事件的訂閱。
setTimeout(() => {
  tcp.close((err) => {
    console.log('close socket.')
  });
  tcp.off('message');
  tcp.off('connect');
  tcp.off('close');
}, 30 * 1000);

應用通過 TLS Socket 進行加密數(shù)據(jù)傳輸

開發(fā)步驟

客戶端 TLS Socket 流程:

? 1. import 需要的 socket 模塊。

? 2. 綁定服務器 IP 和端口號。

? 3. 雙向認證上傳客戶端 CA 證書及數(shù)字證書;單向認證上傳客戶端 CA 證書。

? 4. 創(chuàng)建一個 TLSSocket 連接,返回一個 TLSSocket 對象。

? 5. (可選)訂閱 TLSSocket 相關的訂閱事件。

? 6. 發(fā)送數(shù)據(jù)。

? 7. TLSSocket 連接使用完畢后,主動關閉。

 import socket from '@ohos.net.socket'

   // 創(chuàng)建一個(雙向認證)TLS Socket連接,返回一個TLS Socket對象。
   let tlsTwoWay = socket.constructTLSSocketInstance();

   // 訂閱TLS Socket相關的訂閱事件
   tlsTwoWay.on('message', value => {
       console.log("on message")
       let buffer = value.message
       let dataView = new DataView(buffer)
       let str = ""
       for (let i = 0; i < dataView.byteLength; ++i) {
           str += String.fromCharCode(dataView.getUint8(i))
       }
       console.log("on connect received:" + str)
   });
   tlsTwoWay.on('connect', () =?> {
       console.log("on connect")
   });
   tlsTwoWay.on('close', () => {
       console.log("on close")
   });

   // 綁定本地IP地址和端口。
   tlsTwoWay.bind({ address: '192.168.xxx.xxx', port: xxxx, family: 1 }, err => {
       if (err) {
           console.log('bind fail');
           return;
       }
       console.log('bind success');
   });

   // 設置通信過程中使用參數(shù)
   let options = {
       ALPNProtocols: ["spdy/1", "http/1.1"],

       // 連接到指定的IP地址和端口。
       address: {
           address: "192.168.xx.xxx",
           port: xxxx, // 端口
           family: 1,
       },

       // 設置用于通信過程中完成校驗的參數(shù)。
       secureOptions: {
           key: "xxxx",                            // 密鑰
           cert: "xxxx",                           // 數(shù)字證書
           ca: ["xxxx"],                           // CA證書
           passwd: "xxxx",                         // 生成密鑰時的密碼
           protocols: [socket.Protocol.TLSv12],    // 通信協(xié)議
           useRemoteCipherPrefer: true,            // 是否優(yōu)先使用對端密碼套件
           signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",    // 簽名算法
           cipherSuite: "AES256-SHA256",           // 密碼套件
       },
   };

   // 建立連接
   tlsTwoWay.connect(options, (err, data) => {
       console.error(err);
       console.log(data);
   });

   // 連接使用完畢后,主動關閉。取消相關事件的訂閱。
   tlsTwoWay.close((err) => {
       if (err) {
           console.log("close callback error = " + err);
       } else {
           console.log("close success");
       }
       tlsTwoWay.off('message');
       tlsTwoWay.off('connect');
       tlsTwoWay.off('close');
   });

   // 創(chuàng)建一個(單向認證)TLS Socket連接,返回一個TLS Socket對象。
   let tlsOneWay = socket.constructTLSSocketInstance(); // One way authentication

   // 訂閱TLS Socket相關的訂閱事件
   tlsTwoWay.on('message', value => {
       console.log("on message")
       let buffer = value.message
       let dataView = new DataView(buffer)
       let str = ""
       for (let i = 0;i < dataView.byteLength; ++i) {
           str += String.fromCharCode(dataView.getUint8(i))
       }
       console.log("on connect received:" + str)
   });
   tlsTwoWay.on('connect', () =?> {
       console.log("on connect")
   });
   tlsTwoWay.on('close', () => {
       console.log("on close")
   });

   // 綁定本地IP地址和端口。
   tlsOneWay.bind({ address: '192.168.xxx.xxx', port: xxxx, family: 1 }, err => {
       if (err) {
           console.log('bind fail');
           return;
       }
       console.log('bind success');
   });

   // 設置通信過程中使用參數(shù)
   let oneWayOptions = {
       address: {
           address: "192.168.xxx.xxx",
           port: xxxx,
           family: 1,
       },
       secureOptions: {
           ca: ["xxxx","xxxx"],            // CA證書
           cipherSuite: "AES256-SHA256",   // 密碼套件
       },
   };

   // 建立連接
   tlsOneWay.connect(oneWayOptions, (err, data) => {
       console.error(err);
       console.log(data);
   });

   // 連接使用完畢后,主動關閉。取消相關事件的訂閱。
   tlsTwoWay.close((err) => {
       if (err) {
           console.log("close callback error = " + err);
       } else {
           console.log("close success");
       }
       tlsTwoWay.off('message');
       tlsTwoWay.off('connect');
       tlsTwoWay.off('close');
   });


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)傳輸

    關注

    9

    文章

    1880

    瀏覽量

    64557
  • 網(wǎng)絡管理

    關注

    0

    文章

    120

    瀏覽量

    27670
  • Socket
    +關注

    關注

    0

    文章

    212

    瀏覽量

    34664
  • HarmonyOS
    +關注

    關注

    79

    文章

    1973

    瀏覽量

    30143
收藏 人收藏

    評論

    相關推薦

    鴻蒙原生應用開發(fā)-網(wǎng)絡管理Socket連接(一)

    主要由socket模塊提供。具體接口說明如下表。 TLS Socket連接主要由tls_socket模塊提供。具體接口說明如下表。 本文參考引用Ha
    發(fā)表于 04-01 14:20

    鴻蒙原生應用開發(fā)-網(wǎng)絡管理Socket連接(二)

    應用TCP/UDP協(xié)議進行通信 1.UDP與TCP流程大體類似,下面以TCP為例: 2.import需要的socket模塊。 3.創(chuàng)建一個TCPSocket連接,返回一個TCPSocket對象
    發(fā)表于 04-02 15:22

    鴻蒙原生應用開發(fā)-網(wǎng)絡管理Socket連接(三)

    應用通過TLS Socket進行加密數(shù)據(jù)傳輸 開發(fā)步驟 客戶端TLS Socket流程: 1.import需要的socket模塊。 2.綁定服務器IP和端口號。 3.雙向認證上傳客戶端
    發(fā)表于 04-03 14:26

    鴻蒙原生應用開發(fā)-網(wǎng)絡管理模塊總述

    一、網(wǎng)絡管理模塊主要提供以下功能: HTTP數(shù)據(jù)請求:通過HTTP發(fā)起一個數(shù)據(jù)請求。 WebSocket連接:使用WebSocket建立服務器與客戶端的雙向連接
    發(fā)表于 04-08 09:45

    HarmonyOS應用開發(fā)NFC、藍牙、WLAN、網(wǎng)絡管理、電話服務資料

    和其他設備互聯(lián)互通。HarmonyOS網(wǎng)絡管理模塊主要提供以下功能:數(shù)據(jù)連接管理:網(wǎng)卡綁定,打開URL,數(shù)據(jù)鏈路參數(shù)查詢。數(shù)據(jù)網(wǎng)絡
    發(fā)表于 09-21 14:19

    【中秋國慶不斷更】HarmonyOS網(wǎng)絡管理開發(fā)Socket連接

    簡介 Socket連接主要是通過Socket進行數(shù)據(jù)傳輸,支持TCP/UDP/TLS協(xié)議。 基本概念 ● Socket:套接字,就是對網(wǎng)絡
    發(fā)表于 09-27 15:44

    什么是Socket連接Socket與TCP連接的關系

    主機 A 的應用程序必須通過 Socket 建立連接才能與主機B的應用程序通信,而建立 Socket 連接需要底層 TCP/IP 協(xié)議來建立 TCP
    發(fā)表于 03-31 15:10 ?1041次閱讀

    什么是Socket連接?它與TCP連接有什么關系?

    計算機網(wǎng)絡是我們?nèi)粘I钪胁豢苫蛉钡囊徊糠郑?b class='flag-5'>Socket連接則是網(wǎng)絡通信中必不可少的一種機制。在本篇文章中,我們將通過簡單易懂、生動形象的語言,向大家介紹
    的頭像 發(fā)表于 03-06 11:00 ?1269次閱讀
    什么是<b class='flag-5'>Socket</b><b class='flag-5'>連接</b>?它與TCP<b class='flag-5'>連接</b>有什么關系?

    【干貨】什么是Socket連接?它與TCP連接有什么關系?

    計算機網(wǎng)絡是我們?nèi)粘I钪胁豢苫蛉钡囊徊糠郑?b class='flag-5'>Socket連接則是網(wǎng)絡通信中必不可少的一種機制。在本篇文章中,我們將通過簡單易懂、生動形象的語言,向大家介紹
    的頭像 發(fā)表于 04-09 10:39 ?1304次閱讀
    【干貨】什么是<b class='flag-5'>Socket</b><b class='flag-5'>連接</b>?它與TCP<b class='flag-5'>連接</b>有什么關系?

    Socket 網(wǎng)絡編程框架介紹

    Socket 網(wǎng)絡編程框架 Socket(套接字)是一個網(wǎng)絡編程概念,描述了一個通信端點(Endpoint),用于建立網(wǎng)絡連接(Connec
    的頭像 發(fā)表于 11-09 14:19 ?1085次閱讀
    <b class='flag-5'>Socket</b> <b class='flag-5'>網(wǎng)絡</b>編程框架介紹

    什么是Socket連接Socket的工作原理 它與TCP連接有什么關系?

    和服務器之間的數(shù)據(jù)交換。 Socket連接的工作原理是基于TCP/IP協(xié)議。TCP(傳輸控制協(xié)議)是一種面向連接的、可靠的傳輸協(xié)議,用于在網(wǎng)絡中的兩個應用程序之間建立可靠的通信。而
    的頭像 發(fā)表于 01-22 16:10 ?2291次閱讀

    鴻蒙開發(fā)實戰(zhàn):【網(wǎng)絡管理-Socket連接

    Socket網(wǎng)絡通信方面的應用,展示了Socket在兩端設備的連接驗證、聊天通信方面的應用。
    的頭像 發(fā)表于 03-19 22:04 ?888次閱讀
    鴻蒙<b class='flag-5'>開發(fā)</b>實戰(zhàn):【<b class='flag-5'>網(wǎng)絡</b><b class='flag-5'>管理</b>-<b class='flag-5'>Socket</b><b class='flag-5'>連接</b>】

    鴻蒙OS開發(fā)實戰(zhàn):【Socket小試MQTT連接

    本篇分享一下 HarmonyOS 中的Socket使用方法 將從2個方面實踐: 1. HarmonyOS 手機應用連接PC端 SocketServer 1.
    的頭像 發(fā)表于 04-01 16:14 ?1484次閱讀
    鴻蒙OS<b class='flag-5'>開發(fā)</b>實戰(zhàn):【<b class='flag-5'>Socket</b>小試MQTT<b class='flag-5'>連接</b>】

    socket連接超時如何處理

    網(wǎng)絡編程中,socket連接超時是一個常見的問題,它可能由多種原因引起,比如網(wǎng)絡延遲、服務器負載過高或者客戶端請求超時設置過短等。處理socket
    的頭像 發(fā)表于 11-01 16:48 ?581次閱讀

    socket 連接超時處理技巧

    網(wǎng)絡編程中,Socket連接超時是一個常見的問題。處理超時的關鍵在于確保程序能夠優(yōu)雅地處理這些情況,避免程序崩潰或者無響應。以下是一些處理Socket
    的頭像 發(fā)表于 11-12 14:13 ?362次閱讀
    主站蜘蛛池模板: 无限好资源免费观看| 一本到道免费线观看| 一本道无码v亚洲| av在线观看地址| 国产一区二区精品视频| 免费韩国伦理2017最新| 午夜伦伦电影理论片费看| 中国老头oldday tv| 国产MD视频一区二区三区| 久久精品热线免费| 日本一区不卡在线播放视频免费| 亚洲精品久久久午夜麻豆| 99福利在线| 狠狠色狠狠色综合日日32| 欧美亚洲精品一区二三区8V| 亚洲免费无码av线观看| 成年免费三级视频| 久久视频在线视频观看精品15| 婷婷综合亚洲爱久久| 99久久国产露脸精品麻豆| 韩国女人高潮嗷嗷叫视频 | 国产精品久久久久精品A片软件| 久久九九青青国产精品| 天堂岛www| 99re久久热在这里精品| 黃色带三级a级| 手机精品在线| ewp系列虐杀在线视频| 久久99热这里只频精品6| 无限资源在线观看播放| RUNAWAY韩国动漫免费网| 久久久久久久网站| 午夜日韩久久影院| 成人精品视频| 欧美free嫩交hd| 最近免费中文字幕完整版HD| 国产亚洲欧洲日韩在线观看| 人人草影院| 99久久精品国产国产毛片 | 九九热在线免费观看| 无人区大片中文字幕在线|