OpenHarmony开发者论坛
标题:
TCP连接自动销毁异常
[打印本页]
作者:
MAK丶E
时间:
2024-10-24 18:05
标题:
TCP连接自动销毁异常
[md]### hap创建TCP服务,端口不能正常复用
1. 应用里使用**socket.constructTCPSocketServerInstance()**创建**TCPServer**实例,使用**listen**监听指定IP的对应端口,我这里监听的**192.168.2.251:8222**。使用conect触发连接回调
```
// tcp连接测试
tcpConnect(){
let tcp:socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
let listenAddress: socket.NetAddress = {
port: 8222,
address: "192.168.2.251"
}
// 开启监听服务
tcp.listen(listenAddress, (err:BusinessError)=>{
if(err){
console.log("[console] tcp listen fail");
return;
}
console.log("[console] tcp listen success");
tcp.on("error",(err:BusinessError)=>{
console.log("[console] tcp listen error:",err.message);
})
tcp.on("connect",(client:socket.TCPSocketConnection)=>{
console.log("[console] tcp connect ->",client.clientId);
client.on("message",(data)=>{
console.log("[console] tcp client message:",data.message)
})
client.on("close",()=>{
console.log("[console] tcp client close");
})
})
})
}
```
2. 运行调用这个方法设备会创建8222端口监听实例,并且这时是没有连接实例创建的,可通过netstat命令获取到:
![image.png](
https://forums-obs.openharmony.c ... aevu838t8e0tutt.png
"image.png")
3. 如果这个时候使用任意TCP工具连接该鸿蒙设备的8222端口可以发现设备会创建连接实例:
![image.png](
https://forums-obs.openharmony.c ... n0sojujhehu05r8.png
"image.png")
4. 但如果这时强行关闭hap应用会发现虽然8222的监听不见了,但连接实例会处于TIME_WAIT状态:
![image.png](
https://forums-obs.openharmony.c ... 2wzkwy6c3xwii3e.png
"image.png")
5. 这个TIME_WAIT会存在大概1分钟的时间才会被自动回收,但如果在这个回收之前再次打开这个hap应用,会发现应用不会再创建8222端口的监听服务会自动随机监听一个端口,不会复用8222,只有在之前的连接实例被回收后才能创建8222端口监听服务,不知道怎么解决😕
![image.png](
https://forums-obs.openharmony.c ... 8vec88cyv1jcjjj.png
"image.png")
### 【运行环境】
硬件:飞腾派E2000 内装OpenHarmony4.0.10.23
ROM版本:
DevEvoStudio版本:4.0.0.600
SDK版本:10
[/md]
作者:
MAK丶E
时间:
2024-10-25 14:03
有没有大佬指导一下的
作者:
kuaile
时间:
2024-10-30 18:20
请升级味4.1或者5.0
作者:
MAK丶E
时间:
2024-10-31 09:13
回复
kuaile
: 因为业务方面原因不好升级系统,请问有代码层面的解决方案吗
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5