使用鸿蒙Hi3861完成连接WiFi热点并使用TCPSocketServ
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) 2、客户端连接。接收客户端消息并发送回去。注意连接后,会创建一个新的Socket File Description。 (编辑:好传媒网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |