API
網絡連接結構體
espconn
struct espconn {
/** type of the espconn (TCP, UDP) */
enum espconn_type type; // 網絡連接類型(TCP、UDP)
/** current state of the espconn */
enum espconn_state state; //網絡連接的狀態
union { //使用TCP、UDP的結構體指針
esp_tcp *tcp;
esp_udp *udp;
} proto;
/** A callback function that is informed about events for this espconn */
espconn_recv_callback recv_callback;//接收回調函數
espconn_sent_callback sent_callback; //發送回調函數
uint8 link_cnt;
void *reverse;
};
typedef struct _esp_udp {
int remote_port; //遠端端口號
int local_port; //本機(8266)端口號
uint8 local_ip[4]; //本機(8266)IP
uint8 remote_ip[4];//遠端IP
} esp_udp;
初始化網絡連接(UDP通信)
// ①:定義espconn型結構體(網絡連接結構體
struct espconn ST_NetCon; // 注:必須定義爲全局變量,內核將會使用此變量(內存)
// ②:結構體賦值
ST_NetCon.type = ESPCONN_UDP; // 通信協議:UDP
// ST_NetCon.proto.udp只是一個指針,不是真正的esp_udp型結構體變量
ST_NetCon.proto.udp = (esp_udp *)os_zalloc(sizeof(esp_udp)); // 申請內存(參考下圖)
/* 這樣也可以
//esp_udp ST_UDP; // UDP通信結構體
//ST_NetCon.proto.udp = &ST_UDP;
*/
// 此處無需設置目標IP/端口(ESP8266作爲Server,不需要預先知道Client的IP/端口)
ST_NetCon.proto.udp->local_port = 8266 ; // 設置本地端口
//ST_NetCon.proto.udp->local_port = espconn_port(); // 也可使用espconn_port獲取8266可用端口
// ③:註冊/定義回調函數
espconn_regist_sentcb(&ST_NetCon,ESP8266_WIFI_Send_Cb_JX); // 註冊網絡數據發送成功的回調函數
espconn_regist_recvcb(&ST_NetCon,ESP8266_WIFI_Recv_Cb_JX); // 註冊網絡數據接收成功的回調函數
// ④:調用UDP初始化API
espconn_create(&ST_NetCon); // 初始化UDP通信