HarmonyOS 鸿蒙Next native 连接socket
HarmonyOS 鸿蒙Next native 连接socket
1)您检查下是否添加了"ohos.permission.INTERNET"权限。 2)参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/net-mgmt-overview-V5
1)native测connect需要起独立线程,不然时间链接较长会导致当前线程freeze。起线程后验证ok
2)您可参考以下demo :
static napi_value Add(napi_env env, napi_callback_info info)
{
napi_value result;
std::thread th([](){
auto client_socket = socket(AF_INET, SOCK_STREAM, 0);
if (client_socket == -1) {
OH_LOG_Print(LOG_APP, LOG_INFO, GLOBAL_RESMGR, tag,
"测试 create socket fail");
return;
}
sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(7890);
if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) {
std::cerr << "测试 Invalid address" << std::endl;
OH_LOG_Print(LOG_APP, LOG_INFO, GLOBAL_RESMGR, tag,
"测试 Invalid address");
return;
}
// 连接到服务器
if (connect(client_socket, (sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
OH_LOG_Print(LOG_APP, LOG_INFO, GLOBAL_RESMGR, tag,
"测试 Connection failed");
return;
}
// 发送消息
const char* message = "dqwdqwdwqdqwsss";
send(client_socket, message, strlen(message), 0);
// 接收服务器响应
char buffer[1024] = {0};
int bytes_received = recv(client_socket, buffer, sizeof(buffer) - 1, 0);
if (bytes_received > 0) {
buffer[bytes_received] = '\0'; // 确保字符串结束
OH_LOG_Print(LOG_APP, LOG_INFO, GLOBAL_RESMGR, tag,
"测试 Received from server: %{public}s", buffer);
} else {
OH_LOG_Print(LOG_APP, LOG_INFO, GLOBAL_RESMGR, tag,
"测试 Receive failed");
}
// 关闭 socket
close(client_socket);
});
th.detach();
napi_create_double(env, 1, &result);
return result;
}
在HarmonyOS(鸿蒙)Next native环境中连接socket,通常需要按照以下步骤进行:
-
初始化Socket:首先,通过调用
socket()
函数来创建一个socket描述符,指定协议族(如AF_INET
表示IPv4)、socket类型(如SOCK_STREAM
表示TCP)以及协议(通常为0,表示自动选择)。 -
配置Socket地址:使用
sockaddr_in
结构体来设置目标地址和端口,然后调用bind()
(如果需要绑定本地地址)或connect()
来建立连接。 -
连接Socket:对于客户端,使用
connect()
函数并传入目标地址和端口来建立连接。服务器端则通常使用listen()
和accept()
来监听并接受连接。 -
数据传输:连接建立后,可以使用
send()
和recv()
函数进行数据传输。 -
关闭Socket:数据传输完成后,调用
close()
函数关闭socket连接。
确保在代码中包含必要的头文件,如<sys/types.h>
、<sys/socket.h>
、<netinet/in.h>
等,这些头文件定义了socket编程所需的类型和函数。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html