GD32407Z-NB-IOT试用--UDP测试

作者: icylinker
上传时间为: 2018-07-04 09:02 AM
2018-07-04
阅读:

上一篇中提到,我使用手机的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指令的资料在上一篇已经共享,有需要的可以看一下。

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示