在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

HarmonyOS 網絡管理開發 —Socket 連接

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

簡介

Socket 連接主要是通過 Socket 進行數據傳輸,支持 TCP/UDP/TLS 協議。

基本概念

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

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

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

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

場景介紹

應用通過 Socket 進行數據傳輸,支持 TCP/UDP/TLS 協議。主要場景有:

? ● 應用通過 TCP/UDP Socket 進行數據傳輸

? ● 應用通過 TLS Socket 進行加密數據傳輸

接口說明

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

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

接口名 功能描述
constructUDPSocketInstance() 創建一個 UDPSocket 對象。
constructTCPSocketInstance() 創建一個 TCPSocket 對象。
bind() 綁定 IP 地址和端口
send() 發送數據。
close() 關閉連接。
getState() 獲取 Socket 狀態。
connect() 連接到指定的 IP 地址和端口(僅 TCP 支持)
getRemoteAddress() 獲取對端 Socket 地址(僅 TCP 支持,需要先調用 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 連接的數據包消息事件(僅 UDP 支持)。
off(type: ‘listening’) 取消訂閱 UDPSocket 連接的數據包消息事件(僅 UDP 支持)。
on(type: ‘connect’) 訂閱 TCPSocket 的連接事件(僅 TCP 支持)。
off(type: ‘connect’) 取消訂閱 TCPSocket 的連接事件(僅 TCP 支持)。

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

接口名 功能描述
constructTLSSocketInstance() 創建一個 TLSSocket 對象。
bind() 綁定 IP 地址和端口號。
close(type: ‘error’) 關閉連接。
connect() 連接到指定的 IP 地址和端口。
getCertificate() 返回表示本地證書的對象。
getCipherSuite() 返回包含協商的密碼套件信息的列表。
getProtocol() 返回包含當前連接協商的 SSL/TLS 協議版本的字符串。
getRemoteAddress() 獲取 TLSSocket 連接的對端地址。
getRemoteCertificate() 返回表示對等證書的對象。
getSignatureAlgorithms() 在服務器和客戶端之間共享的簽名算法列表,按優先級降序排列。
getState() 獲取 TLSSocket 連接的狀態。
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() 發送數據。
setExtraOptions() 設置 TLSSocket 連接的其他屬性。

應用 TCP/UDP 協議進行通信

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

? 1. import 需要的 socket 模塊。

? 2. 創建一個 TCPSocket 連接,返回一個 TCPSocket 對象。

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

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

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

? 6. 發送數據。

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

import socket from '@ohos.net.socket'

// 創建一個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');
    // 發送數據
    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 進行加密數據傳輸

開發步驟

客戶端 TLS Socket 流程:

? 1. import 需要的 socket 模塊。

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

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

? 4. 創建一個 TLSSocket 連接,返回一個 TLSSocket 對象。

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

? 6. 發送數據。

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

 import socket from '@ohos.net.socket'

   // 創建一個(雙向認證)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');
   });

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

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

       // 設置用于通信過程中完成校驗的參數。
       secureOptions: {
           key: "xxxx",                            // 密鑰
           cert: "xxxx",                           // 數字證書
           ca: ["xxxx"],                           // CA證書
           passwd: "xxxx",                         // 生成密鑰時的密碼
           protocols: [socket.Protocol.TLSv12],    // 通信協議
           useRemoteCipherPrefer: true,            // 是否優先使用對端密碼套件
           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');
   });

   // 創建一個(單向認證)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');
   });

   // 設置通信過程中使用參數
   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');
   });


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據傳輸
    +關注

    關注

    9

    文章

    1894

    瀏覽量

    64607
  • 網絡管理
    +關注

    關注

    0

    文章

    120

    瀏覽量

    27673
  • Socket
    +關注

    關注

    0

    文章

    212

    瀏覽量

    34695
  • HarmonyOS
    +關注

    關注

    79

    文章

    1975

    瀏覽量

    30204
收藏 人收藏

    評論

    相關推薦

    鴻蒙原生應用開發-網絡管理Socket連接(一)

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

    鴻蒙原生應用開發-網絡管理Socket連接(二)

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

    鴻蒙原生應用開發-網絡管理Socket連接(三)

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

    鴻蒙原生應用開發-網絡管理模塊總述

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

    HarmonyOS應用開發NFC、藍牙、WLAN、網絡管理、電話服務資料

    和其他設備互聯互通。HarmonyOS網絡管理模塊主要提供以下功能:數據連接管理:網卡綁定,打開URL,數據鏈路參數查詢。數據網絡
    發表于 09-21 14:19

    【中秋國慶不斷更】HarmonyOS網絡管理開發Socket連接

    簡介 Socket連接主要是通過Socket進行數據傳輸,支持TCP/UDP/TLS協議。 基本概念 ● Socket:套接字,就是對網絡
    發表于 09-27 15:44

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

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

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

    計算機網絡是我們日常生活中不可或缺的一部分,而Socket連接則是網絡通信中必不可少的一種機制。在本篇文章中,我們將通過簡單易懂、生動形象的語言,向大家介紹
    的頭像 發表于 03-06 11:00 ?1274次閱讀
    什么是<b class='flag-5'>Socket</b><b class='flag-5'>連接</b>?它與TCP<b class='flag-5'>連接</b>有什么關系?

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

    計算機網絡是我們日常生活中不可或缺的一部分,而Socket連接則是網絡通信中必不可少的一種機制。在本篇文章中,我們將通過簡單易懂、生動形象的語言,向大家介紹
    的頭像 發表于 04-09 10:39 ?1313次閱讀
    【干貨】什么是<b class='flag-5'>Socket</b><b class='flag-5'>連接</b>?它與TCP<b class='flag-5'>連接</b>有什么關系?

    Socket 網絡編程框架介紹

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

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

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

    鴻蒙開發實戰:【網絡管理-Socket連接

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

    鴻蒙OS開發實戰:【Socket小試MQTT連接

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

    socket連接超時如何處理

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

    socket 連接超時處理技巧

    網絡編程中,Socket連接超時是一個常見的問題。處理超時的關鍵在于確保程序能夠優雅地處理這些情況,避免程序崩潰或者無響應。以下是一些處理Socket
    的頭像 發表于 11-12 14:13 ?422次閱讀
    主站蜘蛛池模板: 午夜免费在线观看| 日日摸夜夜添免费毛片小说| 久草男人天堂| 婷婷九月| 人人洗澡人人洗澡人人| 1000部啪啪未满十八勿入中国| 奇米影色777四色在线首页| 俺来也久久| 777丰满影院| 亚洲 欧美 丝袜 制服 在线| 黄页网址免费观看18网站| 日本加勒比在线播放| 2018天天干夜夜操| 午夜湿| 日本a网| 神马影视午夜| 美女又黄又www| 久久青草91线频免费观看| 欧美午夜网| 一级毛片日韩a欧美| 中文字幕第8页| 黄色大片aa| bt天堂新版中文在线地址| 性做久久久久久久久| 插插插叉叉叉| h视频在线播放| 日本黄在线观看| 丁香花在线视频| 1024手机看片欧美日韩| 四虎影院2022| 午夜国产福利| 国产免费亚洲| 国产va免费精品高清在线| 成人午夜免费视频| 欧美成人伊人十综合色| 秋霞麻豆| 天天色色网| 天天添| 亚洲成人伊人网| 亚洲第一永久在线观看| 久久99热久久精品动漫|