DevEco Studio虚拟机中怎么连接到主机的服务端程序
DevEco Studio虚拟机中怎么连接到主机的服务端程序
目前在主机中搭建了一个简单后端(Go,TCP通信),搭建鸿蒙前端怎么连接到后端?
目前后端在主机中测试是能正常运行的,
然后我在前端中使用的IP是10.0.2.2
端口与服务端端口一致,服务端尝试过监听127.0.0.1和0.0.0.0,但是都没有连接上的通知
我就给一下我连接到服务端的代码
import { socket } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';
export type receive = (value: socket.SocketMessageInfo) => string | null
export class Linker {
link: socket.TCPSocket = socket.constructTCPSocketInstance();
address: socket.NetAddress = {} as socket.NetAddress;
private receive: receive | null = null
init(){
this.address.address = '10.0.2.2';
this.address.port = 25054
this.link.on('message', (mess: socket.SocketMessageInfo) => {
let result: string = ""
if (this.receive != null)
{
result = this.receive(mess)
} else {
result = "nothing"
}
this.receive = null
return result
})
// 设置错误监听器(非常重要!)
this.link.on('error', (err: BusinessError) => {
console.error('Socket error:', err);
});
}
connect(){
let conn: socket.TCPConnectOptions = {} as socket.TCPConnectOptions
conn.address = this.address
conn.timeout = 9000
this.link.connect(conn)
}
send(value: string, action: receive){
this.receive = action
let current_mess: socket.TCPSendOptions = {
data: value
}
this.link.send(current_mess)
}
}
3 回复
目前在能够完成局域网访问,但是本地映射还是不行
在DevEco Studio虚拟机中连接到主机的服务端程序,首先确保主机和虚拟机在同一网络下。在虚拟机中获取主机的IP地址,然后在DevEco Studio中配置网络连接,使用主机的IP地址和端口号进行连接。确保主机的防火墙允许该端口的通信。通过DevEco Studio的网络调试工具,可以测试连接是否成功。
在DevEco Studio虚拟机中连接主机服务端需要注意以下几点:
- 确认虚拟机网络配置正确:
- 10.0.2.2是标准模拟器访问主机的特殊IP
- 确保DevEco Studio使用的是标准模拟器而非远程设备
- 服务端配置建议:
- 必须监听0.0.0.0而不是127.0.0.1
- 检查主机防火墙是否放行了对应端口(25054)
- 建议先用telnet或nc测试端口可达性
- 代码改进建议:
- 添加connect回调监听连接状态
- 增加更详细的错误处理
修改后的连接代码示例:
this.link.on('connect', () => {
console.log('Socket connected');
});
this.link.connect(conn).catch((err: BusinessError) => {
console.error('Connect failed:', err.code, err.message);
});
- 常见问题排查:
- 确认服务端程序确实在运行且没有报错
- 检查主机和虚拟机时间同步(证书验证可能受影响)
- 尝试更换其他端口测试
如果仍有问题,建议先用简单的ping测试网络连通性,再逐步排查TCP连接问题。