简介
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) {
<