加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 应用 > 正文

使用鸿蒙Hi3861完成连接WiFi热点并使用TCPSocketServ

发布时间:2021-06-03 20:27:24 所属栏目:应用 来源:互联网
导读:1、先定义两个Wifi监听器,一个连接改变、一个状态改变,并注册监听器。其中重要的是OnWifiConnectionChanged连接状态事件处理函数。该函数会在连接成功后设置全局变量g_connected=1,代表已经连接成功。 WifiEventeventListener={ .OnWifiConnectionChang

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。

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读