CH395 UDP服务器发送数据时,有时会重发?

如题,不论是用DEBUG395.exe工具测试还是直接代码控制都出现这种情况,请教如何解决?


同时开启了TCP服务器及UDP服务器两个SOCKET,启用了DHCP,中断处理流程如下:


/**********************************************************************************

* Function Name  : CH395SocketInterrupt

* Description    : CH395 socket 中断,在全局中断中被调用

* Input          : sockindex

* Output         : None

* Return         : None

**********************************************************************************/

void CH395SocketInterrupt(UINT8 sockindex)

{

   UINT8  sock_int_socket;

   UINT16 len;

   UINT16 tmp;

   UINT8  buf[10];


   sock_int_socket = CH395GetSocketInt(sockindex);                   /* 获取socket 的中断状态 */

   

   if(sock_int_socket & SINT_STAT_SENBUF_FREE)                       /* 发送缓冲区空闲,可以继续写入要发送的数据 */

   {

  SockInf[sockindex].RemLen = 0;

   }


   if(sock_int_socket & SINT_STAT_SEND_OK)                           /* 发送完成中断 */

   {

   SockInf[sockindex].RemLen = 0;

   }


   if(sock_int_socket & SINT_STAT_RECV)                              /* 接收中断 */

   {

       len = CH395GetRecvLength(sockindex);                          /* 获取当前缓冲区内数据长度 */

       if(len == 0)return;

       if(SockInf[sockindex].RemLen != 0)return; /*有数据为发送完成*/

  if(len > 512)len = 512; 

  

  SockInf[sockindex].RemLen =  len;                             /* 读取数据 */

       CH395GetRecvData(sockindex,len,CH395Buffer);                  

       

  if(sockindex == UDP_SERVER_SOCKET)

  {

       CH395UDPSendTo(&CH395Buffer[8], (len -8),&CH395Buffer[4], ((UINT16)CH395Buffer[3] << 8) + CH395Buffer[2], sockindex);

  }

  

  if(sockindex == TCP_SERVER_SOCKET)

  {

  CH395SendData(sockindex,CH395Buffer,len);

  }

   }


   if(sock_int_socket & SINT_STAT_CONNECT)                           /* 连接中断,仅在TCP模式下有效*/

   {


   }


   if(sock_int_socket & SINT_STAT_DISCONNECT)                        /* 断开中断,仅在TCP模式下有效 */

   {

   }


   if(sock_int_socket & SINT_STAT_TIM_OUT)                           /* 超时中断,仅在TCP模式下有效 */

   {                                 /*TCP 客户端模式的时候,假如TCP CLIENT无法顺利连接服务器端会进入此中断*/

                                                                    /*此时可以把Socket源端口号进行自加处理,以新的端口去连接服务器*/ 

   }

}



使用UDP@TCP测试工具测试数据收发,如下图,正常的话收发数据长度应该是一致的。

blob.png

UDP测试时,会重发。TCP则不会出现这种状况。

blob.png

您好,重发的现象具体描述一下.


您好,

UDP数据长度是实际长度的2倍,检查一下。检查

1、UDP的目的端口和本地端口是否一致?一致的话会出现描述情况。

2、检查所有发送函数,是否发送了两次?


只有登录才能回复,可以选择微信账号登录