MTK Socket http连接方式流程图
1.创建socket连接
kal_int8 soc_create(kal_uint8 domain,
socket_type_enum type,
kal_uint8 protocol,
module_type mod_id,
kal_uint32 nwk_account_id)
2.设置socket属性,设置socket非阻塞模式
kal_int8 soc_setsockopt(kal_int8 s, kal_uint16 option, kal_uint8 *val, kal_uint8 val_size)
kal_uint8 val = 1;
soc_setsockopt(socket_id,SOC_NBIO,&val, sizeof(val))
val = SOC_READ | SOC_WRITE | SOC_CLOSE | SOC_CONNECT;
soc_setsockopt(socket_id,SOC_ASYNC,&val,sizeof(val))
3. 连接中国移动网关或cmnet服务器公网ip
kal_int8 soc_connect(kal_int8 s, sockaddr_struct *addr)
4. 回调函数
SetProtocolEventHandler(PsFuncPtr funcPtr, U16 eventID)
funcPtr里实现响应socket事件
此函数贯穿sokcet连接,发送,收取过程.合理设计并应用此函数是成功完成一次socket通信的关键
5.发送http请求
kal_int32 soc_send(kal_int8 s, kal_uint8 *buf, kal_int32 len, kal_uint8 flags)
其中buf字串需要遵守http连接协议,例如访问天气的的格式如下:
unsigned char weather_URL[]={"GET http://61.135.159.21/cgi-bin/weather?0755 HTTP/1.1\r\nHost: 61.135.159.21:80\r\nUser-Agent:*/*\r\nAccept:*/*\r\nX-Online-Host: 61.135.159.21\r\nProxy-Connection: Keep-Alive\r\n\r\n"}
6.接收数据
kal_int32 soc_recv(kal_int8 s, kal_uint8 *buf, kal_int32 len, kal_uint8 flags)
buf用来保存接收到的字符串,这里需要注意buf的长度不能超过2000,否则上真机的时候一到申请内存空间时就会死机,这里我用循环来接收信息并写入文件.
7 关闭socket连接
kal_int8 soc_close(kal_int8 s)
参数传入soc_create的返回值