diff --git a/zh-cn/application-dev/connectivity/socket-connection.md b/zh-cn/application-dev/connectivity/socket-connection.md index 21fd25e288eda893cdea73fa57cff83faa48b8e0..12068f2ed0412a6b91f5891f98a832c3ddc51720 100644 --- a/zh-cn/application-dev/connectivity/socket-connection.md +++ b/zh-cn/application-dev/connectivity/socket-connection.md @@ -16,6 +16,7 @@ Socket连接主要是通过Socket进行数据传输,支持TCP/UDP/TLS协议。 应用通过Socket进行数据传输,支持TCP/UDP/TLS协议。主要场景有: - 应用通过TCP/UDP Socket进行数据传输 +- 应用通过TCP Socket Server进行数据传输 - 应用通过TLS Socket进行加密数据传输 ## 接口说明 @@ -28,12 +29,15 @@ Socket连接主要由socket模块提供。具体接口说明如下表。 | -------- | -------- | | constructUDPSocketInstance() | 创建一个UDPSocket对象。 | | constructTCPSocketInstance() | 创建一个TCPSocket对象。 | +| constructTCPSocketServerInstance() | 创建一个TCPSocketServer对象。 | +| listen() | 绑定IP地址和端口,监听并接受与此套接字建立的TCPSocket连接。(仅TCP支持) | | bind() | 绑定IP地址和端口。 | | send() | 发送数据。 | | close() | 关闭连接。 | | getState() | 获取Socket状态。 | | connect() | 连接到指定的IP地址和端口(仅TCP支持) | | getRemoteAddress() | 获取对端Socket地址(仅TCP支持,需要先调用connect方法) | +| setExtraOptions() | 设置Socket连接的其他属性。 | | on(type: 'message') | 订阅Socket连接的接收消息事件。 | | off(type: 'message') | 取消订阅Socket连接的接收消息事件。 | | on(type: 'close') | 订阅Socket连接的关闭事件。 | @@ -163,6 +167,87 @@ setTimeout(() => { }, 30 * 1000); ``` +## 应用通过TCP Socket Server进行数据传输 + +### 开发步骤 + +服务端TCP Socket流程: + +1. import需要的socket模块。 +2. 创建一个TCPSocketServer连接,返回一个TCPSocketServer对象。 +3. 绑定本地IP地址和端口,监听并接受与此套接字建立的客户端TCPSocket连接。 +4. 订阅TCPSocketServer的connect事件,用于监听客户端的连接状态。 +5. 客户端与服务端建立连接后,返回一个TCPSocketConnection对象,用于与客户端通信。 +6. 订阅TCPSocketConnection相关的事件,通过TCPSocketConnection向客户端发送数据。 +7. 主动关闭与客户端的连接。 +8. 取消TCPSocketConnection和TCPSocketServer相关事件的订阅。 + +```js +import socket from '@ohos.net.socket' + +// 创建一个TCPSocketServer连接,返回一个TCPSocketServer对象。 +let tcpServer = socket.constructTCPSocketServerInstance(); + +// 绑定本地IP地址和端口,进行监听 +tcpServer.listen({ address: "192.168.xx.xxx", port: xxxx, family: 1 }, err => { + if (err) { + console.log("listen fail"); + return; + } + console.log("listen success"); +}) + +// 订阅TCPSocketServer的connect事件 +tcpServer.on('connect', function(client) { + // 订阅TCPSocketConnection相关的事件 + client.on('close', () => { + console.log("on close success"); + }); + client.on('message', function(value) { + 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("received message--:" + str); + console.log("received address--:" + value.remoteInfo.address); + console.log("received family--:" + value.remoteInfo.family); + console.log("received port--:" + value.remoteInfo.port); + console.log("received size--:" + value.remoteInfo.size); + }); + + // 向客户端发送数据 + client.send({data: 'Hello, client!'}, err => { + if (err) { + console.log('send fail'); + return; + } + console.log('send success'); + }); + + // 关闭与客户端的连接 + client.close(err => { + if (err) { + console.log('close fail'); + return; + } + console.log('close success'); + }); + + // 取消TCPSocketConnection相关的事件订阅 + setTimeout(() => { + client.off('message'); + client.off('close'); + }, 10 * 1000); +}); + +// 取消TCPSocketServer相关的事件订阅 +setTimeout(() => { + tcpServer.off('connect'); +}, 30 * 1000); +``` + ## 应用通过TLS Socket进行加密数据传输 ### 开发步骤