上一篇中提到,我使用手机的4G卡测试一直无法附着网络,通过咨询后得出的结论是无法用平常的4G卡测试,于是在某宝上弄了一张移动物联卡。
刚收到物联卡我是直接放到板子上,没有动静。还以为买到了山寨卡。问题还是卡没有激活。将卡放入手机即可激活。
激活卡后,急忙试试看能不能附着网络:
一次成功,果然是需要专门的卡来测试。
工具的左侧有UDP的标识,那么有网后直接试试UDP的通讯,这个时候就需要一个UDP的服务器。由于需要公网IP,用最直接的方法,买了个带linux操作系统的云服务器来测试UDP通讯。
用linux系统也是应为网络通讯Linux方面的资源会比较多。直接在网上copy一份udp 服务的代码来测试。就用了如下的代码:
/********************************************************************** * 版权所有 (C)2016, WangSq。 * * 文件名称:xx.c * 文件标识:无 * 内容摘要:udpserver演示程序 * 其它说明:无 * 当前版本:V1.0 * 作 者:WangSq * 完成日期:2016 * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> /********************socket相关******************************************/ //socket参数 #define SERVER_PORT 2234 /*监听端口*/ #define MAX_MSG_SIZE 256 /*recv缓冲器大小*/ int sockfd; //套接字描述符 /*客户机的地址信息及长度信息*/ struct sockaddr_in client; int client_len=sizeof(struct sockaddr_in); //udp服务器监听函数初始化 void udpser_init() { /*服务器的地址信息*/ struct sockaddr_in server; /*服务器填充sockaddr server结构*/ bzero(&server,sizeof(server)); server.sin_family=AF_INET; server.sin_addr.s_addr=htonl(INADDR_ANY); server.sin_port=htons(SERVER_PORT); /*服务器建立socket描述符*/ if(-1 == (sockfd=socket(AF_INET, SOCK_DGRAM,0))) { perror("create socket failed"); exit (1); } /*捆绑socket描述符sockfd*/ if(-1 == ( bind( sockfd, ( struct sockaddr * )&server, sizeof(server) )) ) { perror("bind error"); exit (1); } } /*接收缓冲区--------------------len =4-----------------*/ unsigned char message[MAX_MSG_SIZE]; int recv_len=0; /* IP地址的存放缓冲区*/ char addr_p[INET_ADDRSTRLEN]; char *sndbuf = "Hello! i am OK.\n"; /********************************************************************** * 功能描述:主函数 * 输入参数:无 * 输出参数:无 * 返 回 值:无 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * ------------------------------------------------------------------- * 2016xxxx V1.0 WangSq 创建 ***********************************************************************/ int main(int argc, char *argv[]) { //udp服务器监听函数初始化 udpser_init(); // while(1) // { /********************************接收数据并打印*************************/ recv_len=recvfrom(sockfd,message,sizeof(message),0,(struct sockaddr *)&client,&client_len); //阻塞式 if(recv_len <0) { printf("recvfrom error\n"); exit(1); } /*打印客户端地址和端口号*/ inet_ntop(AF_INET,&client.sin_addr,addr_p,sizeof(addr_p)); printf("client IP is %s, port is %d\n",addr_p,ntohs(client.sin_port)); message[recv_len]='\0'; /*显示消息长度*/ printf("server received %d:%s\n", recv_len, message); /********************************回发数据*************************/ if(sendto(sockfd,sndbuf,strlen(sndbuf),0,(struct sockaddr*)&client,client_len)<0) { printf("sendto error\n"); exit(1); } // } return 0; }
gcc 编译一下直接运行。 配置IP以及端口号连接:
这个UDP服务一直在运行,有兴趣的也可以连一下。服务器只买了一个月的。有需要用的可以私信,与大家公用也可以。
通过工具发送数据后,看UDP服务端是否收到呢?
看打印信息是收到的,但是UDP的代码中有回复给客户端的消息,但是在IOT的调试工具中没有收到。这个问题我还继续弄一下。
目前看看发送UDP的指令格式:
具体的AT指令的资料在上一篇已经共享,有需要的可以看一下。
创建讨论帖子
登录 后参与评论