还是需要开始写博客吧,把每天学到的写下来,希望可以坚持下去。
今天弄懂了路由器和WiFi板连接的过程,开始WiFi没有配上网的时候,其ip为默认ip 0,0,0,0,这个时候是没有连接上网的,这个时候需要采用DHCP协议来给WiFi板分配一个可用IP,
(开始的时候跟socket中bind函数中的一个htonl中的ip分配弄混淆了,在socket中,bind函数中引入的结构体中,其中htonl中是存放ip的,现在发现三种情况1.指定ip 2.INADDR_ANY,随便自己什么IP,3.0XFFFFFFFF待定!广播发。今天晚上又想了一下,bind只是设置自身(服务器/客户端)的,如果再发送的话可以选择另外的结构体,recvfrom可以中的htonl中可以设置为0xFFFFFFFF,是以广播的形式发送出去。)
明白了,那个结构体与bind还是recvfrom无关,那个只是一个放IP的地方,在bind中,它是自身的IP,在recvfrom中,它是监听目标端IP
接下来继续说DHCP协议,主要是由路由器分配给板子IP的,其中正常完整的一次通讯分为4个步骤。
1.客户端广播发,看附近是否有可以提供DHCP设备的路由器。DHCP discover 自身ip为0,广播出去
2.提供DHCP服务的服务器也发广播告诉客户端,我可以提供。DHCP offer 提供一个可用IP,并且发送了路由器名,子网掩码,DNS,域名,租用期限等,好像租用期限过了一半会再次走流程续租。
3.之后客户端向服务器发送请求确认ip的指令。DHCP Request 要服务器确认了以后,客户端才能正常使用这个IP,防止ip被占用把应该。
4.服务器发送ip,并且发送一些比如路由器名称,DHCP ACK 服务器告诉你,OK,你可以用,发的信息跟之前offer的差不多。
现在你的客户端有一个可用IP啦。但是之后应该还有一个续约的流程要走。
今天主要是看到配网流程发现这个的,慢慢理了一下思路,自动配网和手动不是一样的,先让板子进入AP模式,作为服务器,向固定端口号广播自己的mac地址 ,继续监听,手机端APP作为客户端连上之后,发包,发送路由器名称密码,和加密方式等,服务器收到以后回复ok,之后将这些信息存flash。
板子重启,进入客户端模式,之后愉快的与路由器进行配网啦,wifi_connect,需要路由器密码,名称,加密方式作为参数,具体被封装起来了。
连接之后进行固定流程配网,明天再总结。