admin管理员组文章数量:1530019
这次使用Hi3861来完成Wifi热点的连接,并启动TCP SocketServer,接收消息并将消息反馈TcpCLient。
一、连接Wifi热点
主要做法是启动开发板Wifi,然后设置热点和密码等配置信息,再连接热点。
1、先定义两个Wifi监听器,一个连接改变、一个状态改变,并注册监听器。
其中重要的是OnWifiConnectionChanged连接状态事件处理函数。该函数会在连接成功后设置全局变量g_connected=1,代表已经连接成功。
WifiEvent eventListener = {
.OnWifiConnectionChanged = OnWifiConnectionChanged,
.OnWifiScanStateChanged = OnWifiScanStateChanged
};
WifiErrorCode errCode = RegisterWifiEvent(&eventListener);
void OnWifiConnectionChanged(int state, WifiLinkedInfo* info) {
if (!info) return;
if (state == WIFI_STATE_AVALIABLE) {
g_connected = 1;
} else {
g_connected = 0;
}
}
2、启动Wifi
EnableWifi();
3、设置Wifi热点信息,并返回NetworkId
WifiDeviceConfig apConfig = {};
strcpy(apConfig.ssid, "MyWifi");
strcpy(apConfig.preSharedKey, "12345678");
apConfig.securityType = WIFI_SEC_TYPE_PSK;
int netId = -1;
AddDeviceConfig(&apConfig, &netId);
4、连接热点,注意此时的g_connected变量,true代表已连接,false代表未连接。
这个状态在事件处理函数中设置。未连接成功时,系统会循环等待,知道事件设置该值。
ConnectTo(netId);
while (!g_connected) {
osDelay(10);
}
二、进行联网,找到wlan0的network interface,然后启动DHCP客户端,获取IP地址。
struct netif* iface = netifapi_netif_find("wlan0");
if (iface) {
err_t ret = netifapi_dhcp_start(iface);
osDelay(300);
}
三、启动TcpSocketServer,并收发消息
1、创建SocketServer,设置服务端口,并启动监听
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in serverAddr = {0};
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(port);
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(sockfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr));
int backlog = 1;
listen(sockfd, backlog)
版权声明:本文标题:电脑鸿蒙系统怎么连接无线网,如何使用鸿蒙Hi3861来完成Wifi热点的连接 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1726592032a1076583.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论