STE100P 的UIP协议出问题//////急急急

2020-02-04 09:22发布

用的UIP协议。UDP通信。UCOS-II系统驱动
主函数如下:
void uIPMain(void)
{
  u8_t i, arptimer,count;
  uip_eth_hdr *BUF = (uip_eth_hdr*)uip_buf;
  u32 j = 0;


  u32 size;
  

  count =0;
  /* Initialize the uIP TCP/IP stack. */
  uip_init();

  /* Initialize the HTTP server. */
  httpd_init();

  arptimer = 0;

  for(j = 0; j<0x100000; j++);

  //if(uip_connect(uip_conn->ripaddr, 8080) == NULL) {
//                uip_abort();
//        }


   //uip_ipaddr(ipaddr, 110,184,108,37);
//   uip_ipaddr(ipaddr, sysinformation.MyServerIP[0],sysinformation.MyServerIP[1],
//                                                   sysinformation.MyServerIP[2],sysinformation.MyServerIP[3]);

   uip_ipaddr(ipaddr, TCP_IP[0],TCP_IP[1],TCP_IP[2],TCP_IP[3]);


   //uip_connect(ipaddr, HTONS(8080));
   uip_connect(ipaddr, HTONS(TCP_IP_HTONS));
  // uip_connect(ipaddr, HTONS(8080));
  /// uip_udp_new(ipaddr, HTONS(8080));

         for(j = 0; j<0x100000; j++);
        //           PlayIntroDelay = 20;
//           while(PlayIntroDelay != 0);
  //while(JoyState()!= Up)
  while(1)
  {
    /* Let the tapdev network device driver read an entire IP packet
       into the uip_buf. If it must wait for more than 0.5 seconds, it
       will return with the return value 0. If so, we know that it is
       time to call upon the uip_periodic(). Otherwise, the tapdev has
       received an IP packet that is to be processed by uIP. */
            //for(j = 0; j<0x500; j++);
          OSTimeDlyHMSM(0,0,0,8);

          count ++;

          if(count >= 100)
          {
            count =0;
                  if(recon == 0)
                  //uip_connect(ipaddr, HTONS(8080));
                 // uip_connect(ipaddr, HTONS(TCP_IP_HTONS));
          
          }
            

        //  PlayIntroDelay = 1;

        //   while(PlayIntroDelay != 0);
      size = ENET_HandleRxPkt(uip_buf);

      if (size > 0)
        uip_len = size;

      if(uip_len <= 0x0)
      {
        for(i = 0; i < UIP_CONNS; i++)          //tcp 连接
        {
                uip_periodic(i);

           /* If the above function invocation resulted in data that
           should be sent out on the network, the global variable
           uip_len is set to a value > 0. */

             if(uip_len > 0)
           {
              uip_arp_out();

              TransmitPacket();
           }
        }

#if UIP_UDP
      for(i = 0; i < UIP_UDP_CONNS; i++)
      {
        uip_udp_periodic(i);
        /* If the above function invocation resulted in data that
           should be sent out on the network, the global variable
           uip_len is set to a value > 0. */
        if(uip_len > 0)
        {
          uip_arp_out();

          TransmitPacket();
        }
      }
#endif /* UIP_UDP */

      /* Call the ARP timer function every 10 seconds. */
       if(++arptimer == 20)
       {       
          uip_arp_timer();
          arptimer = 0;
       }
    }

    else         //接到数据大于0
    {
      if(BUF->type == htons(UIP_ETHTYPE_IP))        //IP头
      {
          uip_arp_ipin();                  //arp 表
          uip_input();                 //数据处理

         /* If the above function invocation resulted in data that
           should be sent out on the network, the global variable
           uip_len is set to a value > 0. */
           if(uip_len > 0)
           {
                 uip_arp_out();          //
             TransmitPacket();          //真正的发送函数
           }
      }
      else if(BUF->type == htons(UIP_ETHTYPE_ARP)) //ARP头
      {
        uip_arp_arpin();  //arp 输入

        /* If the above function invocation resulted in data that
           should be sent out on the network, the global variable
           uip_len is set to a value > 0. */       
        if(uip_len > 0)
        {
          TransmitPacket();
        }
      }
    }
  }
}

UIP协议两个(或以上)客户端跟同一个服务端器端口通信为什么有一个老是超时重连。

两个客户端老是有一个重连,而且重连是相互交替的,例如我两个客户端的IP尾数分别是20跟22,他们不停的(0.2S)给服务器端口发送数据。服务器显示:先是20的客户端连上了通信正常。22的没连上,过了一会儿(3S)22的连上了,20的却掉线了,再过一会儿20的又重连上了,22的掉线了。无限循环下去。不知道该怎么解决这个问题,求大神相助。我用的是标准的UIP协议。ARM芯片来驱动。只连接一个客户端一点问题都没有。两个客户端就有上述问题,仿真观察 是发送超时,然后连接被关闭。然后又轮询打开。我不知道该怎么改了。
求大神相助。

顺便问一下,UIP协议支持多个客户端同时向一台服务器通信吗

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。