[物联网]NB-IOT(RDA8909) udp收发数据

熟悉linux网络编程的应该对这个很熟悉了,直接上代码ing:

#include "..."

#define DES_IPADDR      "xxx.xxx.xxx.xxx"
#define DES_PORT        (xxxxx)

CFW_TCPIP_SOCKET_ADDR dest_addr;
uint8_t sockfd1 = -1;    //sockfd

#define MAX_LEN     1500  
uint8_t BUFFER[MAX_LEN];


static VOID test_udp_rsp(void *param)
{
    static uint8_t flag = 0;
    COS_EVENT *pEvent = (COS_EVENT *)param;
    COS_PRINTFI("test_udp_rsp Got 0x%x,0x%x,0x%x,0x%x",
          pEvent->nEventId, pEvent->nParam1, pEvent->nParam2, pEvent->nParam3);

    int uSocket = (int)pEvent->nParam1;
    UINT16 uDataSize = pEvent->nParam2;
    UINT8 *pData;
    CFW_TCPIP_SOCKET_ADDR from_addr;
    UINT32 iResult;
    INT32 fromLen = sizeof(CFW_TCPIP_SOCKET_ADDR);

    switch (pEvent->nEventId)
    {
    case EV_CFW_TCPIP_REV_DATA_IND:
        COS_PRINTFI("test_udp_rsp socket:%d, len:%d", uSocket, uDataSize);
        pData = COS_MALLOC(pEvent->nParam2 + 1);
        memset(pData, 0, pEvent->nParam2 + 1);
        if (pData == NULL)
            return;
        iResult = CFW_TcpipSocketRecvfrom(uSocket, pData, uDataSize, 0, &from_addr, &fromLen);
        if (SOCKET_ERROR == iResult){
        }
        else
        {
            memset(BUFFER, 0, MAX_LEN);
            // ((char *)pData)[uDataSize] = '\0';
            // COS_PRINTFI("test_udp_rsp: udp_recv_data = %s", (char *)pData);
            COS_PRINTFI("test_udp_rsp: %d,%s,%hu,%d,", uSocket, inet_ntoa(from_addr.sin_addr), ntohs(from_addr.sin_port), iResult);
            memcpy(BUFFER, pData, uDataSize);
            flag = 1;
        }
        COS_FREE(pData);
        break;
    default:
        COS_PRINTFI("UDP unexpect asynchrous event/response %d", pEvent->nEventId);
        break;
    }
    COS_FREE(pEvent);

    if(1 == flag){
        flag = 0;
        parse_packet(BUFFER, uDataSize);	//解析协议
    }
}

bool udp_init(const char *addr, uint16_t port){
      /* Create UDP Connect */
    UINT8 c_type = CFW_TCPIP_SOCK_DGRAM, c_protocol = CFW_TCPIP_IPPROTO_UDP;
    INT32 result = 0;

    result = CFW_TcpipSocketEX(CFW_TCPIP_AF_INET, c_type, c_protocol, test_udp_rsp, 0);
    if (SOCKET_ERROR == result) {
        COS_PRINTFI("CFW_TcpipSocket() failed!");
        return false;
    }
    sockfd1 = result;

    /* Send UDP data */
    const uint8_t *des_ipaddress = addr;
    UINT16 des_port = port;
    // const uint8_t *send_data = "Hello This is UDP test Demo!";
    const uint8_t send_data[] = {0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf};
    
    
    dest_addr.sin_family = CFW_TCPIP_AF_INET;
    dest_addr.sin_port = htons(des_port);
    dest_addr.sin_len = sizeof(CFW_TCPIP_SOCKET_ADDR);
    result = CFW_TcpipInetAddr(des_ipaddress);
    if (SOCKET_ERROR == result) {
        COS_PRINTFI("CFW_TcpipInetAddr() failed!");
        return false;
    }
    dest_addr.sin_addr.s_addr = result;
    COS_PRINTFI("dest_addr.sin_addr.s_addr send 0x%x", dest_addr.sin_addr.s_addr);
    result = CFW_TcpipSocketSendto(sockfd1, (void *)send_data, 16, 0, &dest_addr, dest_addr.sin_len);
    if (SOCKET_ERROR == result) {
        COS_PRINTFI("UDP send socket data error!");
        return false;
    }
    return true;
}

bool udp_send(uint8_t *data, uint16_t len){
    uint8_t res = CFW_TcpipSocketSendto(sockfd1, (void *)data, len, 0, &dest_addr, dest_addr.sin_len);
#if 1
    myprintf("udp send data");
    for(uint16_t i=0;i< len;i++){
        myprintf("%d:%x",i,data[i]);
    }
#endif
    if (SOCKET_ERROR == res) {
        COS_PRINTFI("UDP send socket data error!");
        return false;
    }
    return true;
}

udp收到数据的信息:
在这里插入图片描述
接收到的数据信息
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值