import { socket } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';
import util from '@ohos.util';
import router from '@ohos.router';
@Entry
@Component
struct Index {
@State message: string = 'TCPSocketServer接口测试';
@State log: string = '';
@State testResults: string[] = [];
private tcpServerCon: socket.TCPSocketServer | null = null;
private tcpClient: socket.TCPSocket | null = null;
private connectCallback: Callback<socket.TCPSocketConnection> | null = null;
private testPort: number = 8080;
// 监听地址配置
private listenAddr: socket.NetAddress = {
address: '0.0.0.0', // 监听所有网络接口
port: 8080,
family: 1 // IPv4
};
build() {
Row() {
Column({ space: 15 }) {
// 1. 顶部固定区域
Text(this.message)
.fontSize(18)
.fontWeight(FontWeight.Bold)
.padding(10)
.backgroundColor('#f0f0f0')
.borderRadius(5)
.width('100%')
.textAlign(TextAlign.Center)
// 2. 可滚动的按钮区域 - 将这部分按钮用Scroll包裹
Scroll() {
Column({ space: 15 }) {
Button('listen_callback')
.onClick(() => this.listen_callback())
.width('90%')
// Button('listen callback 权限校验失败')
// .onClick(() => this.listen_callback_permission())
// .width('90%')
Button('listen callback address参数类型错误 address为 ""')
.onClick(() => this.listen_callback_address_no())
.width('90%')
Button('listen callback address参数类型错误 address为 11111')
.onClick(() => this.listen_callback_address_11111())
.width('90%')
Button('listen callback port 为 undefined')
.onClick(() => this.listen_callback_port_undefined())
.width('90%')
Button('listen callback family 为 undefined')
.onClick(() => this.listen_callback_family_undefined())
.width('90%')
Button('listen callback address为 null')
.onClick(() => this.listen_callback_address_null())
.width('90%')
Button('listen callback address为 undefined')
.onClick(() => this.listen_callback_address_undefined())
.width('90%')
Button('listen 未传入 callback 参数')
.onClick(() => this.listen_callback_no())
.width('90%')
Button('listen callback 类型错误 undefined')
.onClick(() => this.listen_callback_undefined())
.width('90%')
Button('listen callback 类型错误 null')
.onClick(() => this.listen_callback_null())
.width('90%')
Button('listen 无法分配请求的地址')
.onClick(() => this.listen_callback_unable_allocate_address())
.width('90%')
Button('listen_promise')
.onClick(() => this.listen_promise())
.width('90%')
// Button('listen_promise 权限校验失败')
// .onClick(() => this.listen_promise_permission())
// .width('90%')
Button('listen promise address参数类型错误 address为 ""')
.onClick(() => this.listen_promise_address_no())
.width('90%')
Button('listen promise address参数类型错误 address为 "11111"')
.onClick(() => this.listen_promise_address_11111())
.width('90%')
Button('listen promise port 为 undefined')
.onClick(() => this.listen_promise_port_undefined())
.width('90%')
Button('listen promise family 为 undefined')
.onClick(() => this.listen_promise_family_undefined())
.width('90%')
Button('listen promise address为 null')
.onClick(() => this.listen_promise_address_null())
.width('90%')
Button('listen promise address为 undefined')
.onClick(() => this.listen_promise_address_undefined())
.width('90%')
Button('listen promise 无法分配请求的地址')
.onClick(() => this.listen_promise_unable_allocate_address())
.width('90%')
Button('调用 close 且有通过listen方法绑定的端口')
.onClick(() => this.close_normal())
.width('90%')
Button('多次调用listen方法,再调用close方法')
.onClick(() => this.close_special())
.width('90%')
// Button('close 权限校验失败')
// .onClick(() => this.close_permission_denied())
// .width('90%')
//2303109 文件编号无效(Bad file number.)
// Button('listen 文件编号无效')
// .onClick(() => this.listen_callback_bad_file_number())
// .width('90%')
// getState方法按钮
Button('getState_callback')
.onClick(() => this.getState_callback())
.width('90%')
.backgroundColor('#2196F3')
Button('getState callback 类型错误 undefined')
.onClick(() => this.getState_callback_undefined())
.width('90%')
.backgroundColor('#2196F3')
Button('getState callback 类型错误 null')
.onClick(() => this.getState_callback_null())
.width('90%')
.backgroundColor('#2196F3')
Button('getState 未传入 callback 参数')
.onClick(() => this.getState_callback_no())
.width('90%')
.backgroundColor('#2196F3')
Button('getState_promise')
.onClick(() => this.getState_promise())
.width('90%')
.backgroundColor('#2196F3')
// 新增:连接事件绑定/解绑按钮
Button('on_connect')
.onClick(() => this.on_connect())
.width('90%')
.backgroundColor('#2196F3')
// Button('on connect type 为 null')
// .onClick(() => this.on_connect_type_null())
// .width('90%')
// .backgroundColor('#2196F3')
//
// Button('on connect type 为 undefined')
// .onClick(() => this.on_connect_type_undefined())
// .width('90%')
// .backgroundColor('#2196F3')
Button('on connect callback 类型错误 undefined')
.onClick(() => this.on_connect_callback_undefined())
.width('90%')
.backgroundColor('#2196F3')
Button('on connect callback 类型错误 null')
.onClick(() => this.on_connect_callback_null())
.width('90%')
.backgroundColor('#2196F3')
Button('off_connect')
.onClick(() => this.off_connect())
.width('90%')
.backgroundColor('#2196F3')
// Button('off_connect type 为 null')
// .onClick(() => this.off_connect_type_null())
// .width('90%')
// .backgroundColor('#2196F3')
//
// Button('off_connect type 为 undefined')
// .onClick(() => this.off_connect_type_undefined())
// .width('90%')
// .backgroundColor('#2196F3')
Button('off_connect callback 类型错误 undefined')
.onClick(() => this.off_connect_callback_undefined())
.width('90%')
.backgroundColor('#2196F3')
Button('off_connect callback 类型错误 null')
.onClick(() => this.off_connect_callback_null())
.width('90%')
.backgroundColor('#2196F3')
Button('off_connect 未传入 callback 参数')
.onClick(() => this.off_connect_callback_no())
.width('90%')
.backgroundColor('#2196F3')
Button('off_connect_special')
.onClick(() => this.off_connect_special())
.width('90%')
.backgroundColor('#2196F3')
// setExtraOptions方法按钮
Button('setExtraOptions_promise')
.onClick(() => this.setExtraOptions_promise())
.width('90%')
.backgroundColor('#2196F3')
// Button('setExtraOptions promise 权限校验失败')
// .onClick(() => this.setExtraOptions_promise_permission())
// .width('90%')
// .backgroundColor('#2196F3')
Button('setExtraOptions promise keepAlive 为 false')
.onClick(() => this.setExtraOptions_promise_keepAlive_false())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions promise keepAlive 为 undefined')
.onClick(() => this.setExtraOptions_promise_keepAlive_undefined())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions promise OOBlnline 为 false')
.onClick(() => this.setExtraOptions_promise_kOOBlnline_false())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions promise OOBlnline 为 undefined')
.onClick(() => this.setExtraOptions_promise_OOBlnline_undefined())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions promise TCPNoDelay 为 false')
.onClick(() => this.setExtraOptions_promise_TCPNoDelay_false())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions promise TCPNoDelay 为 undefined')
.onClick(() => this.setExtraOptions_promise_TCPNoDelay_undefined())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions promise linger 参数为-1')
.onClick(() => this.setExtraOptions_promise_linger_1())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions promise linger 参数为65536')
.onClick(() => this.setExtraOptions_promise_linger_65536())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions promise on 参数为false')
.onClick(() => this.setExtraOptions_promise_on_false())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions promise socketLinger 为 undefined')
.onClick(() => this.setExtraOptions_promise_socketLinger_undefined())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions promise options 为 null')
.onClick(() => this.setExtraOptions_promise_options_null())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions promise options 为 undefined')
.onClick(() => this.setExtraOptions_promise_options_undefined())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions_callback')
.onClick(() => this.setExtraOptions_callback())
.width('90%')
.backgroundColor('#2196F3')
// Button('setExtraOptions callback 权限校验失败')
// .onClick(() => this.setExtraOptions_callback_permission())
// .width('90%')
// .backgroundColor('#2196F3')
Button('setExtraOptions callback keepAlive 为 false')
.onClick(() => this.setExtraOptions_callback_keepAlive_false())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback keepAlive 为 undefined')
.onClick(() => this.setExtraOptions_callback_keepAlive_undefined())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback OOBlnline 为 false')
.onClick(() => this.setExtraOptions_callback_OOBlnline_false())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback OOBlnline 为 undefined')
.onClick(() => this.setExtraOptions_callback_OOBlnline_undefined())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback TCPNoDelay 为 false')
.onClick(() => this.setExtraOptions_callback_TCPNoDelay_false())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback TCPNoDelay 为 undefined')
.onClick(() => this.setExtraOptions_callback_TCPNoDelay_undefined())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback linger 参数为-1')
.onClick(() => this.setExtraOptions_callback_linger_1())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback linger 参数为65536')
.onClick(() => this.setExtraOptions_callback_linger_65536())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback on 参数为 false')
.onClick(() => this.setExtraOptions_callback_on_false())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback socketLinger 为 undefined')
.onClick(() => this.setExtraOptions_callback_socketLinger_undefined())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback options为 null')
.onClick(() => this.setExtraOptions_callback_option_null())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback options 为 undefined')
.onClick(() => this.setExtraOptions_callback_option_undefined())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions 未传入 callback 参数')
.onClick(() => this.setExtraOptions_callback_no())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback 类型错误 undefined')
.onClick(() => this.setExtraOptions_callback_undefined())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback 类型错误 null')
.onClick(() => this.setExtraOptions_callback_null())
.width('90%')
.backgroundColor('#2196F3')
Button('SetExtraOptions_callback_2303109')
.onClick(() => this.SetExtraOptions_callback_2303109())
.width('90%')
.backgroundColor('#2196F3')
Button('SetExtraOptions_promise_2303109')
.onClick(() => this.SetExtraOptions_promise_2303109())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback keepAlive 为 true')
.onClick(() => this.setExtraOptions_callback_keepAlive_true())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions promise keepAlive 为 true')
.onClick(() => this.setExtraOptions_promise_keepAlive_true())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions callback TCPNoDelay 为 true')
.onClick(() => this.setExtraOptions_callback_TCPNoDelay_true())
.width('90%')
.backgroundColor('#2196F3')
Button('setExtraOptions promise TCPNoDelay 为 true')
.onClick(() => this.setExtraOptions_promise_TCPNoDelay_true())
.width('90%')
.backgroundColor('#2196F3')
Button('getLocalAdress')
.onClick(() => this.getLocalAdress())
.width('90%')
.backgroundColor('#2196F3')
Button('getLocalAdress 无效的文件描述符')
.onClick(() => this.getLocalAdress_invalid_fd())
.width('90%')
.backgroundColor('#2196F3')
Button('getSocketFd')
.onClick(() => this.getSocketFd())
.width('90%')
.backgroundColor('#2196F3')
//构造错误码 2300002 系统内部错误(System internal error.) --无法构建
// Button('listen_callback_2300002')
// .onClick(() => this.listen_callback_2300002())
// .width('90%')
// .backgroundColor('#2196F3')
//无法构建
// Button('listen_callback_2303111')
// .onClick(() => this.listen_callback_2303111())
// .width('90%')
// .backgroundColor('#2196F3')
}
.width('100%')
}
.height('50%')
.width('100%')
// 3. 底部固定区域
Scroll() {
Text(this.log)
.fontSize(14)
.width('100%')
.padding(10)
}
.height('30%')
.width('100%')
.border({ width: 1, color: '#eee' })
.borderRadius(5)
Row({ space: 10 }) {
Button('← 返回')
.width('50%')
.padding({ left: 15, right: 15 })
.backgroundColor('#4CAF50')
.onClick(() => {
router.back();
})
Button('清理日志')
.width('50%')
.padding({ left: 15, right: 15 })
.backgroundColor('#4CAF50')
.onClick(() => this.clearTestResults())
}
}
.width('100%')
.padding(10)
}
.height('100%')
.backgroundColor('#f9f9f9')
}
aboutToDisappear(): void {
this.stopTest();
}
private stopTest(): void {
if (this.tcpServerCon) {
this.tcpServerCon.close();
this.tcpServerCon = null;
}
if (this.tcpClient) {
this.tcpClient.close();
this.tcpClient = null;
}
this.releaseNetworkResources();
setTimeout(() => {
console.info(`端口 ${this.testPort} 清理完成`);
}, 300);
}
private resetNetworkState(): void {
this.testPort = 8080;
console.info('网络状态已重置');
this.addLog('IP和端口绑定状态已重置');
}
private clearDNSCache(): void {
try {
const localhost = '127.0.0.1';
console.info(`DNS缓存清理完成,本地地址: ${localhost}`);
} catch (error) {
console.info('DNS清理完成');
}
}
private releaseNetworkResources(): void {
try {
const releaseSocket: socket.TLSSocket = socket.constructTLSSocketInstance();
const releaseAddress: socket.NetAddress = {
address: '0.0.0.0',
port: this.testPort
};
releaseSocket.bind(releaseAddress, () => {
releaseSocket.close();
console.info(`端口 ${this.testPort} 已强制释放`);
});
setTimeout(() => {
releaseSocket.close();
}, 100);
} catch (error) {
console.info('端口释放操作完成');
}
this.resetNetworkState();
this.clearDNSCache();
}
clearTestResults(): void {
this.testResults = [];
this.log = '';
}
private addLog(content: string) {
this.log += `${content}\n`;
}
// Promise 方式启动监听
private listen_promise(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8088,
family: 1
}
tcpServer.listen(listenAddr).then(() => {
console.info('listen success');
this.addLog('listen success');
}).catch((err: BusinessError) => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}).finally(() => {
tcpServer.close();
});
}
//listen_promise_permission
private listen_promise_permission(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8088,
family: 1
}
tcpServer.listen(listenAddr).then(() => {
console.info('listen success');
this.addLog('listen success');
}).catch((err: BusinessError) => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}).finally(() => {
tcpServer.close();
});
}
// listen_promise_address_null
private listen_promise_address_null(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: "0,0,0,0",
port: 8088,
family: 1
}
try {
tcpServer.listen(null);
}
catch (err){
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
}
setTimeout((): void => { tcpServer.close(); }, 3000);
}
//listen_promise_address_undefined
private listen_promise_address_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: "0,0,0,0",
port: 8088,
family: 1
}
try {
tcpServer.listen(undefined);
}
catch (err){
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
}
setTimeout((): void => { tcpServer.close(); }, 3000);
}
//listen_promise_address_no
private listen_promise_address_no(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: "",
port: 8088,
family: 1
}
try {
tcpServer.listen(listenAddr).then((): void => {
this.addLog('address为 ""时, listen success');
}).catch((err: BusinessError) => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}).finally((): void => {
tcpServer.close();
});
}
catch (err){
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
}
setTimeout((): void => { tcpServer.close(); }, 3000);
}
//listen_promise_address_11111
private listen_promise_address_11111(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: "11111",
port: 8088,
family: 1
}
tcpServer.listen(listenAddr).then((): void => {
this.addLog('address为 "11111"时, listen success');
}).catch((err: BusinessError) => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}).finally((): void => {
tcpServer.close();
});
}
//listen_promise_port_undefined
private listen_promise_port_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: undefined,
family: 1
}
tcpServer.listen(listenAddr).then((): void => {
this.addLog("port 为 undefined 时,listen success");
}).catch((err: BusinessError) => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}).finally((): void => {
tcpServer.close();
});
}
//listen_promise_family_undefined
private listen_promise_family_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: undefined
}
tcpServer.listen(listenAddr).then((): void => {
this.addLog("family 为 undefined 时,listen success");
}).catch((err: BusinessError) => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}).finally(() => {
tcpServer.close();
});
}
//listen_promise_unable_allocate_address
private listen_promise_unable_allocate_address() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '192.168.100.200',
port: 8088,
family: 1
}
tcpServer.listen(listenAddr).then(() => {
console.info('listen success');
this.addLog('listen success');
}).catch((err: BusinessError) => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
console.info(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}).finally(() => {
tcpServer.close();
});
}
// Callback 方式启动监听
private listen_callback() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
try{
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
return;
}
this.addLog('listen success');
})
}catch(err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}finally {
tcpServer.close();
}
}
//listen_callback_permission
private listen_callback_permission() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
try{
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
return;
}
console.info("listen success");
this.addLog('listen success');
})
}catch(err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}finally {
tcpServer.close();
}
}
//listen address为null
private listen_callback_address_null() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
try{
tcpServer.listen(null, (err: BusinessError) => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
})
}
catch (err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}finally {
tcpServer.close();
}
}
//listen address为undefined
private listen_callback_address_undefined() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
try{
tcpServer.listen(undefined, (err: BusinessError) => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
})
}
catch (err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}finally {
tcpServer.close();
}
}
//listen_callback_address_no
private listen_callback_address_no() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: "",
port: 8080,
family: 1
}
try{
tcpServer.listen(listenAddr, (err: BusinessError) => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
})
}
catch (err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
this.addLog("listen address 为 undefined");
}
finally {
tcpServer.close();
}
}
//listen_callback_address_11111
private listen_callback_address_11111() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '11111',
port: 8080,
family: 1
}
try{
tcpServer.listen(listenAddr, (err: BusinessError) => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
})
}
catch (err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}
finally {
tcpServer.close();
}
}
//listen_callback_port_undefined
private listen_callback_port_undefined() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: undefined,
family: 1
}
try{
tcpServer.listen(listenAddr, (err:BusinessError) =>{
if(err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
return;
}
this.addLog("port 为 undefined 时,listen success");
});
}catch(err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}finally {
tcpServer.close();
}
}
//listen_callback_family_undefined
private listen_callback_family_undefined() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: undefined
}
try{
tcpServer.listen(listenAddr, (err:BusinessError) =>{
if(err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
return;
}
this.addLog("family 为 undefined 时,listen success");
});
}catch(err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}finally {
tcpServer.close();
}
}
//listen callback 类型错误
private listen_callback_null() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8088,
family: 1
}
try{
tcpServer.listen(listenAddr, null);
}
catch (err) {
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
}
finally {
tcpServer.close();
}
}
//listen callback 类型错误
private listen_callback_undefined() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8088,
family: 1
}
try{
tcpServer.listen(listenAddr, undefined);
}
catch (err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}
finally {
tcpServer.close();
}
}
//listen 未传入 callback
private listen_callback_no() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8088,
family: 1
}
try{
tcpServer.listen(listenAddr,).then(() => {
this.addLog("listen 未传入 callback时,listen success");
}).catch((err: BusinessError) => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
});
}
catch (err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}finally {
tcpServer.close();
}
}
//listen_callback_unable_allocate_address
private listen_callback_unable_allocate_address() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '192.168.100.200',
port: 8088,
family: 1
}
try{
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
return;
}
console.info("listen success");
this.addLog('listen success');
})
}catch(err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}finally {
tcpServer.close();
}
}
private async cleanSocketServer(server: socket.TCPSocketServer): Promise<void> {
try {
// 先关闭监听
await server.close();
await new Promise<void>((resolve: () => void): void => { setTimeout(resolve, 200); });
// 检查状态,确保已关闭
const state: socket.SocketStateBase | undefined = await server.getState();
//this.addLog(`资源清理完成,服务器状态: ${JSON.stringify(state)}`);
} catch (err) {
//this.addLog(`资源清理警告: ${err.message}`);
}
}
//close_normal
private close_normal(): void {
setTimeout((): void => {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr).then((): void => {
this.addLog('listen success');
}).catch((err: BusinessError): void => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
});
tcpServer.getState().then((data: socket.SocketStateBase): void => {
this.addLog('getState success' + JSON.stringify(data));
}).catch((err: BusinessError): void => {
this.addLog('getState fail' + JSON.stringify(err));
}).finally((): void => {
tcpServer.close(); // 停止监听
this.cleanSocketServer(tcpServer);
tcpServer.getState().then((data: socket.SocketStateBase): void => {
this.addLog('getState success' + JSON.stringify(data));
}).catch((err: BusinessError): void => {
this.addLog('getState fail' + JSON.stringify(err));
});
});
}, 2000);
}
//close_special
private close_special(): void {
setTimeout((): void => {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8081,
family: 1
}
let listenAddr1: socket.NetAddress = {
address: '0.0.0.0',
port: 8082,
family: 1
}
tcpServer.listen(listenAddr).then((): void => {
tcpServer.getLocalAddress().then((localAddress: socket.NetAddress): void => {
this.addLog("SUCCESS! Address:" + JSON.stringify(localAddress));
tcpServer.listen(listenAddr1).then((): void => {
tcpServer.getLocalAddress().then((localAddress: socket.NetAddress): void => {
this.addLog("SUCCESS! Address:" + JSON.stringify(localAddress));
}).catch((err: BusinessError): void => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
})
}).catch((err: BusinessError): void => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
});
}).catch((err: BusinessError): void => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
})
}).catch((err: BusinessError): void => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}).finally((): void => {
tcpServer.close(); // 停止监听
this.cleanSocketServer(tcpServer);
tcpServer.getState().then((data: socket.SocketStateBase): void => {
this.addLog('getState success' + JSON.stringify(data));
}).catch((err: BusinessError): void => {
this.addLog('getState fail' + JSON.stringify(err));
});
});
}, 2000);
}
private close_permission_denied(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr).then((): void => {
this.addLog('listen success');
}).catch((err: BusinessError): void => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
});
tcpServer.close(); // 停止监听
tcpServer.getState().then((data: socket.SocketStateBase): void => {
this.addLog('getState success' + JSON.stringify(data));
}).catch((err: BusinessError): void => {
this.addLog('getState fail' + JSON.stringify(err));
});
}
// Promise 方式获取服务器状态
private getState_promise(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError): void => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
})
this.cleanSocketServer(tcpServer);
setTimeout((): void => {
tcpServer.getState().then((data: socket.SocketStateBase): void => {
console.info('getState success' + JSON.stringify(data));
this.addLog('getState success' + JSON.stringify(data));
}).catch((err: BusinessError): void => {
console.error('getState fail');
this.addLog('getState fail');
}).finally((): void => {
tcpServer.close();
});
}, 1000);
}
// Callback 方式获取服务器状态
private getState_callback(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError): void => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
})
this.cleanSocketServer(tcpServer);
setTimeout((): void => {
try{
tcpServer.getState((err: BusinessError, data: socket.SocketStateBase): void => {
if (err) {
console.error('getState fail');
this.addLog('listen fail');
return;
}
console.info('getState success:' + JSON.stringify(data));
this.addLog('getState success' + JSON.stringify(data));
})
}catch(err){
console.error('getState fail');
this.addLog('listen fail');
return;
}finally {
tcpServer.close();
}
}, 1000)
}
//getState_callback_undefined
private getState_callback_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError): void => {
if (err) {
this.addLog('listen fail');
return;
}
})
try{
tcpServer.getState(undefined);
}
catch (err){
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
} finally{
tcpServer.close();
}
}
//getState_callback_null
private getState_callback_null(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError): void => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
})
try{
tcpServer.getState(null);
}
catch (err){
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
} finally{
tcpServer.close();
}
}
//getState 未传入 callback
private getState_callback_no() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
this.addLog('listen fail');
return;
}
})
try{
tcpServer.getState();
this.addLog('getState 未传入 callback 参数时, getState success');
}
catch (err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
} finally{
tcpServer.close();
}
}
// Promise 方式设置额外选项
private setExtraOptions_promise() {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: { on: true, linger: 10 } as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions).then((): void => {
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
}).catch((err: BusinessError) => {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
}).finally((): void => {
tcpServer.close();
});
})
}
//setExtraOptions_promise_permission
private setExtraOptions_promise_permission(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: { on: true, linger: 10 } as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions).then((): void => {
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
}).catch((err: BusinessError) => {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
}).finally((): void => {
tcpServer.close();
});
})
}
private setExtraOptions_promise_keepAlive_true(): void {
// 服务端
const server: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
const keepAliveOptions: socket.TCPExtraOptions = {
keepAlive: true, // 重点测试
OOBInline: false,
TCPNoDelay: false,
socketLinger: { on: false, linger: 0 } as socket.SocketLinger,
socketTimeout: 10000
};
server.listen({ address: '0.0.0.0', port: 9091, family: 1 }, (err: BusinessError) => {
if (err) {
this.addLog(`服务端监听失败: ${err.message}`);
return;
}
this.addLog('服务端: 监听成功,端口 9091');
server.setExtraOptions(keepAliveOptions).then(() => {
this.addLog('服务端: keepAlive=true 已设置');
}).catch((err: BusinessError) => {
this.addLog(`服务端设置选项失败: ${err.message}`);
});
server.on('connect', (client: socket.TCPSocketConnection) => {
this.addLog(`[${new Date().toISOString()}] 客户端连接`);
// 记录最后活动时间
let lastActivity = Date.now();
let isConnected = true;
// 修正:使用正确的回调类型
client.on('message', (value: socket.SocketMessageInfo) => {
lastActivity = Date.now();
// 解析消息内容
let messageView = '';
let uint8Array = new Uint8Array(value.message);
for (let i: number = 0; i < value.message.byteLength; i++) {
let messages = uint8Array[i];
let message = String.fromCharCode(messages);
messageView += message;
}
this.addLog(`收到消息: ${messageView}`);
console.info('remoteInfo: ' + JSON.stringify(value.remoteInfo));
});
client.on('close', () => {
isConnected = false;
this.addLog('连接已关闭');
});
// 测试1: 120秒后检查连接状态(短时间测试)
setTimeout(() => {
if (!isConnected) {
this.addLog('❌ 连接已断开(可能在30秒内被系统关闭)');
return;
}
const idleTime = Date.now() - lastActivity;
this.addLog(`[${new Date().toISOString()}] 空闲时长: ${idleTime}ms`);
// 尝试发送数据验证连接
const tcpSendOption: socket.TCPSendOptions = {
data: 'KeepAlive Test!'
};
client.send(tcpSendOption, (err: BusinessError) => {
if (err) {
this.addLog(`❌ 发送失败: ${err.message} (连接可能已断开)`);
} else {
this.addLog('✅ 发送成功 (连接保持活动)');
}
// 关闭连接
client.close();
server.close();
});
}, 120000); // 30秒测试
});
});
// 客户端(2秒后连接)
setTimeout(() => {
const client: socket.TCPSocket = socket.constructTCPSocketInstance();
const clientOpts: socket.TCPConnectOptions = {
address: { address: '127.0.0.1', port: 9091, family: 1 } as socket.NetAddress,
timeout: 5000
};
client.connect(clientOpts, (err: BusinessError) => {
if (err) {
this.addLog(`客户端连接失败: ${err.message}`);
return;
}
this.addLog('客户端: 连接成功,将保持空闲120秒');
// 设置客户端keepAlive
client.setExtraOptions(keepAliveOptions);
// 监听消息
client.on('message', (value: socket.SocketMessageInfo) => {
let messageView = '';
let uint8Array = new Uint8Array(value.message);
for (let i: number = 0; i < value.message.byteLength; i++) {
let messages = uint8Array[i];
let message = String.fromCharCode(messages);
messageView += message;
}
this.addLog(`客户端收到消息: ${messageView}`);
});
// 连接后不发送任何数据,保持空闲
});
}, 2000);
}
private setExtraOptions_callback_keepAlive_true(): void {
// 服务端
const server: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
const keepAliveOptions: socket.TCPExtraOptions = {
keepAlive: true, // 重点测试
OOBInline: false,
TCPNoDelay: false,
socketLinger: { on: false, linger: 0 } as socket.SocketLinger,
socketTimeout: 10000
};
server.listen({ address: '0.0.0.0', port: 9091, family: 1 }, (err: BusinessError) => {
if (err) {
this.addLog(`服务端监听失败: ${err.message}`);
return;
}
this.addLog('服务端: 监听成功,端口 9091');
server.setExtraOptions(keepAliveOptions,(err: BusinessError) => {
if (err) {
this.addLog(`服务端设置选项失败: ${err.message}`);
} else {
this.addLog('服务端: keepAlive=true 已设置');
}
});
server.on('connect', (client: socket.TCPSocketConnection) => {
this.addLog(`客户端连接`);
// 记录最后活动时间
let lastActivity = Date.now();
let isConnected = true;
// 修正:使用正确的回调类型
client.on('message', (value: socket.SocketMessageInfo) => {
lastActivity = Date.now();
// 解析消息内容
let messageView = '';
let uint8Array = new Uint8Array(value.message);
for (let i: number = 0; i < value.message.byteLength; i++) {
let messages = uint8Array[i];
let message = String.fromCharCode(messages);
messageView += message;
}
this.addLog(`收到消息: ${messageView}`);
console.info('remoteInfo: ' + JSON.stringify(value.remoteInfo));
});
client.on('close', () => {
isConnected = false;
this.addLog('连接已关闭');
});
// 测试1: 120秒后检查连接状态(短时间测试)
setTimeout(() => {
if (!isConnected) {
this.addLog('❌ 连接已断开(可能在30秒内被系统关闭)');
return;
}
const idleTime = Date.now() - lastActivity;
this.addLog(`空闲时长: ${idleTime}ms`);
// 尝试发送数据验证连接
const tcpSendOption: socket.TCPSendOptions = {
data: 'KeepAlive Test!'
};
client.send(tcpSendOption, (err: BusinessError) => {
if (err) {
this.addLog(`❌ 发送失败: ${err.message} (连接可能已断开)`);
} else {
this.addLog('✅ 发送成功 (连接保持活动)');
}
// 关闭连接
client.close();
server.close();
});
}, 120000); // 30秒测试
});
});
// 客户端(2秒后连接)
setTimeout((): void => {
const client: socket.TCPSocket = socket.constructTCPSocketInstance();
const clientOpts: socket.TCPConnectOptions = {
address: { address: '127.0.0.1', port: 9091, family: 1 } as socket.NetAddress,
timeout: 5000
};
client.connect(clientOpts, (err: BusinessError) => {
if (err) {
this.addLog(`客户端连接失败: ${err.message}`);
return;
}
this.addLog('客户端: 连接成功,将保持空闲120秒');
// 设置客户端keepAlive
client.setExtraOptions(keepAliveOptions);
// 监听消息
client.on('message', (value: socket.SocketMessageInfo) => {
let messageView = '';
let uint8Array = new Uint8Array(value.message);
for (let i: number = 0; i < value.message.byteLength; i++) {
let messages = uint8Array[i];
let message = String.fromCharCode(messages);
messageView += message;
}
this.addLog(`客户端收到消息: ${messageView}`);
});
// 连接后不发送任何数据,保持空闲
});
}, 2000);
}
//setExtraOptions_promise_keepAlive_false
private setExtraOptions_promise_keepAlive_false(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: false,
OOBInline: true,
TCPNoDelay: true,
socketLinger: { on: true, linger: 10 } as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions).then((): void => {
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
}).catch((err: BusinessError) => {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
}).finally((): void => {
tcpServer.close();
});
})
}
//setExtraOptions_promise_keepAlive_undefined
private setExtraOptions_promise_keepAlive_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: undefined,
OOBInline: true,
TCPNoDelay: true,
socketLinger: { on: true, linger: 10 } as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
try {
tcpServer.setExtraOptions(tcpExtraOptions).then((): void => {
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
}).catch((err: BusinessError) => {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
}).finally((): void => {
tcpServer.close();
});
} catch (err) {
this.addLog(`错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
} finally {
tcpServer.close();
}
})
}
//setExtraOptions_promise_kOOBlnline_false
private setExtraOptions_promise_kOOBlnline_false(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: false,
TCPNoDelay: true,
socketLinger: { on: true, linger: 10 } as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions).then((): void => {
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
}).catch((err: BusinessError) => {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
}).finally((): void => {
tcpServer.close();
});
})
}
//setExtraOptions_promise_OOBlnline_undefined
private setExtraOptions_promise_OOBlnline_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: false,
TCPNoDelay: true,
socketLinger: { on: true, linger: 10 } as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
};
try {
tcpServer.setExtraOptions(tcpExtraOptions).then((): void => {
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
}).catch((err: BusinessError) => {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
}).finally((): void => {
tcpServer.close();
});
} catch (err) {
this.addLog(`错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
} finally {
tcpServer.close();
}
})
}
private setExtraOptions_promise_TCPNoDelay_true(): void {
const server: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
const noDelayOptions: socket.TCPExtraOptions = {
keepAlive: false,
OOBInline: false,
TCPNoDelay: true, // 重点测试
socketLinger: { on: false, linger: 0 } as socket.SocketLinger,
socketTimeout: 5000
};
server.listen({ address: '0.0.0.0', port: 9093, family: 1 }, (err: BusinessError) => {
if (err) {
this.addLog(`服务端监听失败: ${err.message}`);
return;
}
this.addLog('服务端: 监听成功,端口 9093');
this.addLog('测试说明: TCPNoDelay=true 会禁用Nagle算法,小数据包立即发送');
server.setExtraOptions(noDelayOptions).then((): void => {
this.addLog('服务端: TCPNoDelay=true 已设置');
}).catch((err: BusinessError) => {
this.addLog(`服务端设置选项失败: ${err.message}`);
})
server.on('connect', (client: socket.TCPSocketConnection) => {
this.addLog('客户端连接成功');
let messageCount = 0;
let startTime = Date.now();
client.on('message', (value: socket.SocketMessageInfo) => {
messageCount++;
this.addLog(`收到消息${messageCount}: ${value.message.byteLength}字节`);
if (messageCount >= 10) {
const endTime = Date.now();
const duration = endTime - startTime;
this.addLog(`✅ 收到10个消息,总耗时: ${duration}ms`);
if (duration < 100) {
this.addLog('✅ TCPNoDelay生效: 小数据包快速传输');
} else {
this.addLog('⚠️ 传输较慢,可能Nagle算法仍生效');
}
client.close();
server.close();
}
});
});
});
// 客户端
setTimeout((): void => {
const client: socket.TCPSocket = socket.constructTCPSocketInstance();
const clientOpts: socket.TCPConnectOptions = {
address: { address: '127.0.0.1', port: 9093, family: 1 } as socket.NetAddress,
timeout: 5000
};
client.connect(clientOpts, (err: BusinessError) => {
if (err) {
this.addLog(`客户端连接失败: ${err.message}`);
return;
}
this.addLog('客户端: 连接成功');
// 设置客户端TCPNoDelay
client.setExtraOptions(noDelayOptions);
// 连续发送10个小数据包
this.addLog('开始发送10个小数据包...');
const startTime = Date.now();
const sendNext = (index: number): void => {
if (index > 10) {
const endTime = Date.now();
this.addLog(`客户端发送完成,耗时: ${endTime - startTime}ms`);
return;
}
const message = `Msg${index}`;
const tcpSendOption: socket.TCPSendOptions = {
data: message
};
client.send(tcpSendOption, (err: BusinessError) => {
if (err) {
this.addLog(`发送失败: ${err.message}`);
return;
}
this.addLog(`已发送消息${index}: ${message}`);
sendNext(index + 1);
});
};
sendNext(1);
});
}, 2000);
}
private setExtraOptions_callback_TCPNoDelay_true(): void {
const server: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
const noDelayOptions: socket.TCPExtraOptions = {
keepAlive: false,
OOBInline: false,
TCPNoDelay: true, // 重点测试
socketLinger: { on: false, linger: 0 } as socket.SocketLinger,
socketTimeout: 5000
};
server.listen({ address: '0.0.0.0', port: 9093, family: 1 }, (err: BusinessError) => {
if (err) {
this.addLog(`服务端监听失败: ${err.message}`);
return;
}
this.addLog('服务端: 监听成功,端口 9093');
this.addLog('测试说明: TCPNoDelay=true 会禁用Nagle算法,小数据包立即发送');
server.setExtraOptions(noDelayOptions, (err: BusinessError) => {
if(err){
this.addLog(`服务端设置选项失败: ${err.message}`);
}else{
this.addLog('服务端: TCPNoDelay=true 已设置');
}
});
server.on('connect', (client: socket.TCPSocketConnection) => {
this.addLog('客户端连接成功');
let messageCount = 0;
let startTime = Date.now();
client.on('message', (value: socket.SocketMessageInfo) => {
messageCount++;
this.addLog(`收到消息${messageCount}: ${value.message.byteLength}字节`);
if (messageCount >= 10) {
const endTime = Date.now();
const duration = endTime - startTime;
this.addLog(`✅ 收到10个消息,总耗时: ${duration}ms`);
if (duration < 100) {
this.addLog('✅ TCPNoDelay生效: 小数据包快速传输');
} else {
this.addLog('⚠️ 传输较慢,可能Nagle算法仍生效');
}
client.close();
server.close();
}
});
});
});
// 客户端
setTimeout((): void => {
const client: socket.TCPSocket = socket.constructTCPSocketInstance();
const clientOpts: socket.TCPConnectOptions = {
address: { address: '127.0.0.1', port: 9093, family: 1 } as socket.NetAddress,
timeout: 5000
};
client.connect(clientOpts, (err: BusinessError) => {
if (err) {
this.addLog(`客户端连接失败: ${err.message}`);
return;
}
this.addLog('客户端: 连接成功');
// 设置客户端TCPNoDelay
client.setExtraOptions(noDelayOptions);
// 连续发送10个小数据包
this.addLog('开始发送10个小数据包...');
const startTime = Date.now();
const sendNext = (index: number): void => {
if (index > 10) {
const endTime = Date.now();
this.addLog(`客户端发送完成,耗时: ${endTime - startTime}ms`);
return;
}
const message = `Msg${index}`;
const tcpSendOption: socket.TCPSendOptions = {
data: message
};
client.send(tcpSendOption, (err: BusinessError) => {
if (err) {
this.addLog(`发送失败: ${err.message}`);
return;
}
this.addLog(`已发送消息${index}: ${message}`);
sendNext(index + 1);
});
};
sendNext(1);
});
}, 2000);
}
//setExtraOptions_promise_TCPNoDelay_false
private setExtraOptions_promise_TCPNoDelay_false(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: false,
socketLinger: { on: true, linger: 10 } as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions).then((): void => {
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
}).catch((err: BusinessError) => {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
}).finally((): void => {
tcpServer.close();
});
})
}
//setExtraOptions_promise_TCPNoDelay_undefined
private setExtraOptions_promise_TCPNoDelay_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: undefined,
socketLinger: { on: true, linger: 10 } as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
try {
tcpServer.setExtraOptions(tcpExtraOptions).then((): void => {
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
}).catch((err: BusinessError) => {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
}).finally((): void => {
tcpServer.close();
});
} catch (err) {
this.addLog(`错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
} finally {
tcpServer.close();
}
})
}
//setExtraOptions_promise_linger_1
private setExtraOptions_promise_linger_1(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: { on: true, linger: -1 } as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions).then((): void => {
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
}).catch((err: BusinessError) => {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
}).finally((): void => {
tcpServer.close();
});
})
}
//setExtraOptions_promise_linger_65536
private setExtraOptions_promise_linger_65536(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: { on: true, linger: 65536 } as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions).then(() => {
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
}).catch((err: BusinessError) => {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
}).finally((): void => {
tcpServer.close();
});
})
}
//setExtraOptions_promise_on_false
private setExtraOptions_promise_on_false(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: { on: false, linger: 10 } as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions).then((): void => {
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
}).catch((err: BusinessError) => {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
}).finally((): void => {
tcpServer.close();
});
})
}
//setExtraOptions_promise_socketLinger_undefined
private setExtraOptions_promise_socketLinger_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: undefined,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions).then((): void => {
this.addLog('socketLinger 为 undefined 时,setExtraOptions success');
}).catch((err: BusinessError) => {
this.addLog('setExtraOptions fail');
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}).finally((): void => {
tcpServer.close();
});
})
}
//setExtraOptions_promise_options_null
private setExtraOptions_promise_options_null(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
try {
tcpServer.setExtraOptions(null);
} catch (err) {
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
this.addLog('setExtraOptions fail');
} finally {
tcpServer.close();
}
})
}
//setExtraOptions_promise_options_undefined
private setExtraOptions_promise_options_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
try {
tcpServer.setExtraOptions(undefined);
} catch (err) {
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
this.addLog('setExtraOptions fail');
} finally {
tcpServer.close();
}
})
}
// Callback 方式设置额外选项
private setExtraOptions_callback(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: {
on: true,
linger: 10
} as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
if (err) {
this.addLog('setExtraOptions fail');
setTimeout((): void => { tcpServer.close(); }, 300);
return;
}
this.addLog('setExtraOptions success');
});
setTimeout((): void => { tcpServer.close(); }, 300);
})
}
//setExtraOptions_callback_permission
private setExtraOptions_callback_permission(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: {
on: true,
linger: 10
} as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError): void => {
if (err) {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
setTimeout((): void => { tcpServer.close(); }, 300);
return;
}
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
});
setTimeout((): void => { tcpServer.close(); }, 300);
})
}
//setExtraOptions_callback_keepAlive_false
private setExtraOptions_callback_keepAlive_false(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: false,
OOBInline: true,
TCPNoDelay: true,
socketLinger: {
on: true,
linger: 10
} as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError): void => {
if (err) {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
setTimeout((): void => { tcpServer.close(); }, 300);
return;
}
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
});
setTimeout((): void => { tcpServer.close(); }, 300);
})
}
//setExtraOptions_callback_keepAlive_undefined
private setExtraOptions_callback_keepAlive_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: undefined as boolean | undefined,
OOBInline: true,
TCPNoDelay: true,
socketLinger: {
on: true,
linger: 10
} as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
};
try {
tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError): void => {
if (err) {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
setTimeout((): void => { tcpServer.close(); }, 300);
return;
}
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
});
} catch (err) {
this.addLog(`错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
}
setTimeout((): void => { tcpServer.close(); }, 300);
})
}
//setExtraOptions_callback_OOBlnline_false
private setExtraOptions_callback_OOBlnline_false(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: false,
TCPNoDelay: true,
socketLinger: {
on: true,
linger: 10
} as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError): void => {
if (err) {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
setTimeout((): void => { tcpServer.close(); }, 300);
return;
}
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
});
setTimeout((): void => { tcpServer.close(); }, 300);
})
}
//setExtraOptions_callback_kOOBlnline_undefined
private setExtraOptions_callback_OOBlnline_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: undefined as boolean | undefined,
TCPNoDelay: true,
socketLinger: {
on: true,
linger: 10
} as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
};
try {
tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError): void => {
if (err) {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
setTimeout((): void => { tcpServer.close(); }, 300);
return;
}
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
});
} catch (err) {
this.addLog(`错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
}
setTimeout((): void => { tcpServer.close(); }, 300);
})
}
//setExtraOptions_callback_TCPNoDelay_false
private setExtraOptions_callback_TCPNoDelay_false(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: false,
socketLinger: {
on: true,
linger: 10
} as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError): void => {
if (err) {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
setTimeout((): void => { tcpServer.close(); }, 300);
return;
}
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
});
setTimeout((): void => { tcpServer.close(); }, 300);
})
}
//setExtraOptions_callback_TCPNoDelay_undefined
private setExtraOptions_callback_TCPNoDelay_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: undefined,
socketLinger: {
on: true,
linger: 10
} as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
try {
tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError): void => {
if (err) {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
setTimeout((): void => { tcpServer.close(); }, 300);
return;
}
});
} catch (err) {
this.addLog(`错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
}
setTimeout((): void => { tcpServer.close(); }, 300);
})
}
//setExtraOptions_callback_linger_1
private setExtraOptions_callback_linger_1(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: {
on: true,
linger: -1
} as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError): void => {
if (err) {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
setTimeout((): void => { tcpServer.close(); }, 300);
return;
}
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
});
setTimeout((): void => { tcpServer.close(); }, 300);
})
}
//setExtraOptions_callback_linger_65536
private setExtraOptions_callback_linger_65536(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: {
on: true,
linger: 65536
} as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError): void => {
if (err) {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
setTimeout((): void => { tcpServer.close(); }, 300);
return;
}
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
});
setTimeout((): void => { tcpServer.close(); }, 300);
})
}
//setExtraOptions_callback_on_false
private setExtraOptions_callback_on_false(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: {
on: false,
linger: 10
} as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError): void => {
if (err) {
console.error('setExtraOptions fail');
this.addLog('setExtraOptions fail');
setTimeout((): void => { tcpServer.close(); }, 300);
return;
}
console.info('setExtraOptions success');
this.addLog('setExtraOptions success');
});
setTimeout((): void => { tcpServer.close(); }, 300);
})
}
//setExtraOptions_callback_socketLinger_undefined
private setExtraOptions_callback_socketLinger_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
interface SocketLinger {
on: boolean;
linger: number;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: undefined,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError): void => {
if (err) {
this.addLog('setExtraOptions fail');
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
setTimeout((): void => { tcpServer.close(); }, 300);
return;
}
this.addLog('socketLinger 为 undefined 时,setExtraOptions success');
});
setTimeout((): void => { tcpServer.close(); }, 300);
})
}
//setExtraOptions_callback_option_null
private setExtraOptions_callback_option_null(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
interface SocketLinger {
on: boolean;
linger: number;
}
try{
tcpServer.setExtraOptions(null,(err: BusinessError): void => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
});
}
catch (err){
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
this.addLog('setExtraOptions fail');
}
setTimeout((): void => { tcpServer.close(); }, 300);
})
}
//setExtraOptions_callback_option_undefined
private setExtraOptions_callback_option_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
interface SocketLinger {
on: boolean;
linger: number;
}
try{
tcpServer.setExtraOptions(undefined,(err: BusinessError): void => {
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
});
}
catch (err){
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
this.addLog('setExtraOptions fail');
}
setTimeout((): void => { tcpServer.close(); }, 300);
})
}
//setExtraOptions_callback_null
private setExtraOptions_callback_null(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: {
on: true,
linger: 10
} as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
try{
tcpServer.setExtraOptions(tcpExtraOptions, null);
}
catch (err){
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
}
setTimeout((): void => { tcpServer.close(); }, 3000);
})
}
//setExtraOptions_callback_no
private setExtraOptions_callback_no(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: {
on: true,
linger: 10
} as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
try {
tcpServer.setExtraOptions(tcpExtraOptions)
this.addLog("setExtraOptions 未传入 callback 参数时, setExtraOptions success");
}
catch (err){
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
}
setTimeout((): void => { tcpServer.close(); }, 3000);
})
}
//setExtraOptions_callback_undefined
private setExtraOptions_callback_undefined(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog('listen fail');
return;
}
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: {
on: true,
linger: 10
} as socket.SocketLinger,
receiveBufferSize: 8192,
sendBufferSize: 8192,
reuseAddress: true,
socketTimeout: 3000
}
try {
tcpServer.setExtraOptions(tcpExtraOptions, undefined);
}
catch (err){
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
}
setTimeout((): void => { tcpServer.close(); }, 3000);
})
}
private getLocalAdress(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr).then(() => {
tcpServer.getLocalAddress().then((localAddress: socket.NetAddress) => {
this.addLog("success Address:" + JSON.stringify(localAddress));
}).catch((err: BusinessError) => {
this.addLog("fail Error:" + JSON.stringify(err));
}).finally(() => {
tcpServer.close();
});
}).catch((err: BusinessError) => {
this.addLog('listen fail');
})
}
//getLocalAdress 无效的文件描述符
private getLocalAdress_invalid_fd(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr).then((): void => {
if (tcpServer) {
tcpServer.close();
this.addLog("服务器已关闭,现在在已关闭的socket上操作...");
} else {
this.addLog('TCPSocketServer实例不存在');
}
setTimeout((): void => {
tcpServer.getLocalAddress().then((localAddress: socket.NetAddress) => {
this.addLog("SUCCESS! Address:" + JSON.stringify(localAddress));
}).catch((err: BusinessError) => {
this.addLog('✅ 正确捕获错误:socket 预期(2301009),实际:'+ err.code);
})
}, 2000);
}).catch((err: BusinessError) => {
this.addLog('listen fail');
}).finally(() => {
tcpServer.close();
});
}
private getSocketFd(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.listen(listenAddr).then(() => {
tcpServer.getSocketFd().then((data: number) => {
this.addLog("getSocketFd成功,Fd:" + data);
console.info("getSocketFd成功,Fd:" + data);
}).catch((err: BusinessError) => {
console.error(`getSocketFd失败, fail: ${err.code}, 信息: ${err.message}`);
this.addLog(`getSocketFd失败, fail: ${err.code}, 信息: ${err.message}`);
}).finally(() => {
tcpServer.close();
});
}).catch((err: BusinessError) => {
this.addLog('listen fail');
})
}
//listen_callback 2300002 系统内部错误(System internal error.)
private listen_callback_2300002(): void {
}
//SetExtraOptions_callback 2303109 文件编号无效(Bad file number.)
private SetExtraOptions_callback_2303109(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
};
// 核心修改1:直接在未listen/未绑定的状态下调用setExtraOptions(XTS用例的核心逻辑,触发2303109)
// 定义XTS用例中的TCPExtraOptions配置
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: {
on: true,
linger: 10
} as socket.SocketLinger,
receiveBufferSize: 1000,
sendBufferSize: 1000,
reuseAddress: true,
socketTimeout: 3000
};
// 第一步:未listen的初始状态下调用setExtraOptions(高概率触发2303109)
this.addLog("在未listen的TCPSocketServer上调用setExtraOptions...");
tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError): void => {
if (err) {
//this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
if (err.code === 2303109) {
this.addLog('✅ 正确捕获错误:socket 预期(2303109),实际:'+ err.code);
}
} else {
this.addLog("setExtraOptions执行成功(预期外结果)");
}
});
}
//SetExtraOptions_promise 2303109 文件编号无效(Bad file number.)
private SetExtraOptions_promise_2303109(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
};
// 核心修改1:直接在未listen/未绑定的状态下调用setExtraOptions(XTS用例的核心逻辑,触发2303109)
// 定义XTS用例中的TCPExtraOptions配置
let tcpExtraOptions: socket.TCPExtraOptions = {
keepAlive: true,
OOBInline: true,
TCPNoDelay: true,
socketLinger: {
on: true,
linger: 10
} as socket.SocketLinger,
receiveBufferSize: 1000,
sendBufferSize: 1000,
reuseAddress: true,
socketTimeout: 3000
};
// 第一步:未listen的初始状态下调用setExtraOptions(高概率触发2303109)
this.addLog("在未listen的TCPSocketServer上调用setExtraOptions...");
tcpServer.setExtraOptions(tcpExtraOptions).then((): void => {
console.info('setExtraOptions success');
this.addLog("setExtraOptions执行成功(预期外结果)");
}).catch((err: BusinessError): void => {
console.error('setExtraOptions fail');
//this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
if (err.code === 2303109) {
this.addLog('✅ 正确捕获错误:socket 预期(2303109),实际:'+ err.code);
}
});
}
//listen_callback 2303111 资源暂时不可用,请稍后再试(Resource temporarily unavailable. Try again.)
private listen_callback_2303111(): void {
// 核心:使用TCPSocketServer
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
// 选择常用端口(8080易被占用,或直接用80/443等已占用端口,触发更快)
let listenAddr: socket.NetAddress = {
address: '0.0.0.0', // 监听所有IPv4地址
port: 8080,
family: 1 // AF_INET (IPv4,对应family=1)
};
this.addLog("=== 开始通过TCPSocketServer构造2303111错误码(资源暂时不可用) ===");
this.addLog("核心逻辑:同一端口重复监听 + 多实例占用 + 短时间高频调用");
// 核心逻辑1:多次高频调用listen(短时间内重复请求,制造资源冲突)
const repeatListen = (times: number) => {
if (times <= 0) return;
// 直接调用listen(传入NetAddress,无额外Options,适配鸿蒙所有版本)
tcpServer.listen(listenAddr, (err: BusinessError) => {
if (err) {
this.addLog(`第${5 - times + 1}次listen异常,错误码: ${err.code}, 信息: ${err.message}`);
// 只关注2303111错误码(删除其他错误码判断)
if (err.code === 2303111) {
this.addLog(`成功触发2303111错误码!(资源暂时不可用)`);
}
} else {
this.addLog(`第${5 - times + 1}次listen成功(预期外结果,端口未被占用)`);
// 若第一次listen成功,立即再次listen(此时端口已被占用,触发2303111)
// 同时关闭reuseAddress的底层逻辑:先close再立即listen,制造资源未释放
tcpServer.close();
// 立即再次listen,利用端口释放的时间差制造资源暂时不可用
tcpServer.listen(listenAddr, (err2: BusinessError) => {
if (err2) {
this.addLog(`关闭后立即listen异常,错误码: ${err2.code}, 信息: ${err2.message}`);
if (err2.code === 2303111) {
this.addLog(`端口释放时间差触发2303111错误码!`);
}
}
});
}
// 无延迟递归,短时间内高频调用,加剧资源冲突
repeatListen(times - 1);
});
};
// 执行5次高频listen操作(足够触发资源暂时不可用)
repeatListen(5);
// 核心逻辑2:创建第二个TCPSocketServer实例监听同一端口,抢占资源
let tcpServer2: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
// 第二个实例同样高频listen,加剧资源冲突
const repeatListen2 = (times: number) => {
if (times <= 0) return;
tcpServer2.listen(listenAddr, (err: BusinessError) => {
if (err) {
this.addLog(`第二个TCPServer第${3 - times + 1}次listen异常,错误码: ${err.code}, 信息: ${err.message}`);
if (err.code === 2303111) {
this.addLog(`第二个TCPServer实例成功触发2303111错误码!`);
}
}
repeatListen2(times - 1);
});
};
repeatListen2(3);
// 核心逻辑3:使用已被系统占用的端口(终极方案,必触发2303111)
// 若上述逻辑未触发,可替换listenAddr的port为80/443/3306(如下)
// let occupiedPortAddr: socket.NetAddress = {
// address: '0.0.0.0',
// port: 80, // 系统HTTP端口,几乎必被占用
// family: 1
// };
// tcpServer.listen(occupiedPortAddr, (err: BusinessError) => {
// if (err && err.code === 2303111) {
// this.addLog(`占用系统端口触发2303111错误码!`);
// }
// });
}
private on_connect() {
if (!this.tcpServerCon) {
this.tcpServerCon = socket.constructTCPSocketServerInstance();
}
const listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
};
this.tcpServerCon.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog("listen fail");
this.tcpServerCon = null;
return;
}
console.info("listen success");
this.addLog("listen success");
// 定义全局回调(存储到 this.connectCallback,确保 off 时引用一致)
this.connectCallback = (data: socket.TCPSocketConnection) => {
console.info(JSON.stringify(data));
this.addLog(`on_connect: ` + JSON.stringify(data));
};
if (this.tcpServerCon) {
this.tcpServerCon.on('connect', this.connectCallback);
this.createTCPClientAndConnect();
setTimeout((): void => { this.cleanConnectResource(); }, 3000);
}
});
}
private createTCPClientAndConnect(): void {
this.tcpClient = socket.constructTCPSocketInstance();
let connectOptions: socket.TCPConnectOptions = {
address: {
address: '127.0.0.1',
port: 8080,
family: 1
} as socket.NetAddress,
};
// 客户端发起连接
this.tcpClient.connect(connectOptions, (err: BusinessError): void => {
if (err) {
console.error("客户端连接失败:", err);
this.addLog(`客户端连接失败: ${err.code} - ${err.message}`);
this.tcpClient = null;
return;
}else{
console.info("客户端连接服务器成功!");
this.addLog("客户端已成功连接服务器");
}
});
}
private cleanConnectResource(): void {
if (this.tcpServerCon) {
this.tcpServerCon.off('connect');
}
this.tcpServerCon?.close();
// 重置实例
this.tcpServerCon = null;
this.connectCallback = null;
}
//on_connect_callback_null
private on_connect_callback_null(): void {
if (!this.tcpServerCon) {
this.tcpServerCon = socket.constructTCPSocketServerInstance();
}
const listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
};
this.tcpServerCon.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog("listen fail");
this.tcpServerCon = null;
return;
}
console.info("listen success");
this.addLog("listen success");
// 定义全局回调(存储到 this.connectCallback,确保 off 时引用一致)
this.connectCallback = null;
if (this.tcpServerCon) {
try {
this.tcpServerCon.on('connect', this.connectCallback);
}
catch (err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}
}
});
}
//on_connect_callback_undefined
private on_connect_callback_undefined(): void {
if (!this.tcpServerCon) {
this.tcpServerCon = socket.constructTCPSocketServerInstance();
}
const listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
};
this.tcpServerCon.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog("listen fail");
this.tcpServerCon = null;
return;
}
console.info("listen success");
this.addLog("listen success");
if (this.tcpServerCon) {
try {
this.tcpServerCon.on('connect', undefined);
}
catch (err) {
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
}
}
});
}
private off_connect(): void {
if (!this.tcpServerCon) {
this.tcpServerCon = socket.constructTCPSocketServerInstance();
}
const listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
};
this.tcpServerCon.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog("listen fail");
this.tcpServerCon = null;
return;
}
console.info("listen success");
this.addLog("listen success");
this.connectCallback = (data: socket.TCPSocketConnection) => {
console.info(JSON.stringify(data));
this.addLog(`on_connect: ` + JSON.stringify(data));
};
if (this.tcpServerCon) {
this.tcpServerCon.on('connect', this.connectCallback);
this.tcpServerCon.off('connect', this.connectCallback);
this.createTCPClientAndConnect();
this.addLog("取消订阅connect事件成功");
setTimeout((): void => { this.cleanConnectResource(); }, 3000);
}
});
}
//off_connect_special
private off_connect_special(): void {
if (!this.tcpServerCon) {
this.tcpServerCon = socket.constructTCPSocketServerInstance();
}
this.tcpServerCon.listen(this.listenAddr, (err: BusinessError) => {
if (err) {
this.addLog(`服务器启动失败: ${err.message}`);
this.tcpServerCon = null;
return;
}
this.addLog(`服务器启动成功`);
});
let connectCallback1 = () => {
this.addLog('connectCallback1已触发');
}
let connectCallback2 = () => {
this.addLog('connectCallback2已触发');
}
let connectCallback3 = () => {
this.addLog('connectCallback3已触发');
}
this.tcpServerCon.on('connect', connectCallback1);
this.tcpServerCon.on('connect', connectCallback2);
this.tcpServerCon.on('connect', connectCallback3);
this.tcpServerCon.off('connect');
setTimeout((): void => {
this.addLog('off已取消所有的订阅事件')
}, 1000);
let testClient: socket.TCPSocket = socket.constructTCPSocketInstance();
const clientOpts: socket.TCPConnectOptions = {
address: { address: '127.0.0.1', port: 8080, family: 1 } as socket.NetAddress,
};
testClient.connect(clientOpts, (err: BusinessError) => {
if (err) {
this.addLog(`客户端连接失败: ${err.message}`);
return;
}
this.addLog('客户端连接服务器成功');
});
}
//off_connect_type_null
// private off_connect_type_null() {
// if (!this.tcpServerCon) {
// this.tcpServerCon = socket.constructTCPSocketServerInstance();
// }
// this.connectCallback = (client: socket.TCPSocketConnection) => {};
//
// try{
// this.tcpServerCon.off(null, (err: BusinessError) => {});
// }
// catch (err){
// this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
// }
// }
//off_connect_type_undefined
// private off_connect_type_undefined() {
// if (!this.tcpServerCon) {
// this.tcpServerCon = socket.constructTCPSocketServerInstance();
// }
// this.connectCallback = (client: socket.TCPSocketConnection) => {};
// if (!this.tcpServerCon || !this.connectCallback) {
// this.addLog("服务器未启动或未绑定 connect 事件");
// return;
// }
//
// try{
// this.tcpServerCon.off(undefined, (err: BusinessError) => {});
// }
// catch (err){
// this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
// }
// }
//off_connect_callback_null
private off_connect_callback_null(): void {
if (!this.tcpServerCon) {
this.tcpServerCon = socket.constructTCPSocketServerInstance();
}
this.connectCallback = (client: socket.TCPSocketConnection) => {};
try{
this.tcpServerCon.off('connect', null);
}
catch (err){
this.addLog(`异常,错误码: ${err.code}, 信息: ${err.message}`);
}
}
//off_connect_callback_no
private off_connect_callback_no(): void {
if (!this.tcpServerCon) {
this.tcpServerCon = socket.constructTCPSocketServerInstance();
}
const listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
};
this.tcpServerCon.listen(listenAddr, (err: BusinessError) => {
if (err) {
console.error("listen fail");
this.addLog("listen fail");
this.tcpServerCon = null;
return;
}
console.info("listen success");
this.addLog("listen success");
this.connectCallback = (data: socket.TCPSocketConnection) => {
console.info(JSON.stringify(data));
this.addLog(`on_connect: ` + JSON.stringify(data));
};
if (this.tcpServerCon) {
this.tcpServerCon.on('connect', this.connectCallback);
this.tcpServerCon.off('connect');
this.createTCPClientAndConnect();
this.addLog("取消订阅connect事件成功");
setTimeout((): void => { this.cleanConnectResource(); }, 3000);
}
});
}
//off_connect_callback_undefined
private off_connect_callback_undefined(): void {
if (!this.tcpServerCon) {
this.tcpServerCon = socket.constructTCPSocketServerInstance();
}
this.connectCallback = (client: socket.TCPSocketConnection) => {};
try {
this.tcpServerCon.off('connect', undefined);
}
catch (err) {
this.addLog(`异常,错误码: ${(err as BusinessError).code}, 信息: ${(err as Error).message}`);
}
}
private close(): void {
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddr: socket.NetAddress = {
address: '0.0.0.0',
port: 8080,
family: 1
}
tcpServer.on('connect', (connection: socket.TCPSocketConnection) => {
console.info("connection clientId: " + connection.clientId);
tcpServer.close();
connection.close();
});
tcpServer.listen(listenAddr).then(() => {
console.info('listen success');
}).catch((err: BusinessError) => {
console.error('listen fail: ' + err.code);
});
}
}