介绍
本模块提供利用Socket进行数据传输的能力,支持TCPSocket、UDPSocket、WebSocket和TLSSocket。
说明:
本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
导包
接下来介绍该模块下tcp的使用
模拟器是一个虚拟机,所以如果要在本机测试需要获得本机的局域网地址。
客户端代码
客户端测试代码
import { socket } from '@kit.NetworkKit'
import { BusinessError } from '@kit.BasicServicesKit'
import { util } from '@kit.ArkTS';
class tcpOptions implements socket.TCPConnectOptions{
address: socket.NetAddress={} as socket.NetAddress;
timeout?: number | undefined;
}
let options=new tcpOptions()
options.address.address='192.168.110.1'
options.address.port=8000
options.timeout=6000
export const tcpSendData=()=>{
let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
tcp.connect(options, (err: BusinessError) => {
if (err) {
console.log('connect fail');
console.log(`res:${JSON.stringify(err)}`)
return;
}
console.log('connect success');
let textEncoder = new util.TextEncoder();
let buffer = new ArrayBuffer(20);
let result = new Uint8Array(buffer);
result = textEncoder.encodeInto("test");
let tcpSendOptions: socket.TCPSendOptions = {
data: 'ok'
}
tcp.send(tcpSendOptions, (err: BusinessError) => {
if (err) {
console.log(`send:${JSON.stringify(err)}`)
console.log('send fail');
return;
}
console.log('send success');
})
})
}
测试页面代码
import { tcpSendData, udpSendData } from '../common/net'
@Entry
@Component
struct SocketTest {
build() {
Row() {
Column() {
Button('send udp data')
.onClick(()=>{
tcpSendData()
})
}
.width('100%')
}
.height('100%')
}
}
测试成功
服务器端代码
使用python写一个简单的server连接接收,鸿蒙传输的数据
# This is a sample Python script.
import socket
# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
def tcpServer():
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
sock.bind(('192.168.110.1',8000))
sock.listen()
while True:
client,client_address=sock.accept()
data=client.recv(1024).decode()
if client!=None :
print('connect')
if not data:
break
buffer=data
print('receive data:'+buffer)
if __name__ == '__main__':
tcpServer()
# See PyCharm help at https://www.jetbrains.com/help/pycharm/