打印
[单片机芯片]

307如何主动发送UDP包?

[复制链接]
1741|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhjerry|  楼主 | 2022-5-28 20:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zhjerry 于 2022-5-28 20:29 编辑

使用307EVT中的UdpClient例程测试,添加9行代码如下。测试结果两种主动发送方式都返回代码0x1C,发送长度0,显然都没有发送成功。
但是例程中接收后发送的方式都是可以。但是需要主动发送的时候怎么处理?

void WCHNET_CreatUdpSocket(void)
{
   u8 i;
   SOCK_INF TmpSocketInf;                                                      /* 创建临时socket变量 */

   memset((void *)&TmpSocketInf,0,sizeof(SOCK_INF));               /* 库内部会将此变量复制,所以最好将临时变量先全部清零 */
   memcpy((void *)TmpSocketInf.IPAddr,DESIP,4);                       /* 设置目的IP地址 */
   TmpSocketInf.DesPort  = 2099;
   TmpSocketInf.SourPort = srcport;                                            /* 设置源端口 */
   TmpSocketInf.ProtoType = PROTO_TYPE_UDP;                         /* 设置socekt类型 */
   TmpSocketInf.RecvStartPoint = (u32)SocketRecvBuf[SocketId];  /* 设置接收缓冲区的接收缓冲区 */
   TmpSocketInf.RecvBufLen = RECE_BUF_LEN;                           /* 设置接收缓冲区的接收长度 */
   i = WCHNET_SocketCreat(&SocketId,&TmpSocketInf);              /* 创建socket,将返回的socket索引保存在SocketId中 */
   printf("WCHNET_SocketCreat %d srcport %d\r\n",SocketId,srcport);
   mStopIfError(i);
     //Newly added lines to test UDP send! Both got len=0, i=0x1c!
     u32 len = 48;
     u8 ip_addr[4] = {192,168,1,118};
     memset(MyBuf, 0, 48);    MyBuf[0] = 0x23;
     i = WCHNET_SocketSend(SocketId, MyBuf, &len);
     printf("%d ",i);
     len = 48;
     i = WCHNET_SocketUdpSendTo(SocketId, MyBuf, &len, ip_addr, 2099);
     printf("%d ",i);
}

使用特权

评论回复
沙发
zhjerry|  楼主 | 2022-5-28 20:57 | 只看该作者
好吧, 自己回复。

库和物理层初始化后等待若干时间后可以发送成功。

使用特权

评论回复
板凳
七毛钱| | 2022-6-7 15:30 | 只看该作者
有的时候就是这样,一直琢磨不透的东西指不定哪天就突然明白了

使用特权

评论回复
地板
daichaodai| | 2022-6-9 21:37 | 只看该作者
嗯,自己给问题解决了。恭喜恭喜。

使用特权

评论回复
5
huquanz711| | 2022-6-10 08:01 | 只看该作者
自己解决问题,不错啊!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

232

帖子

4

粉丝