0
votes

Erreur de routage dans LwIP lorsque j'essaie de vous connecter au serveur

im essayant d'utiliser lwip pour se connecter à un hôte distant mais im échoué et obtenez une erreur de routage lorsque j'essaie de vous connecter.

J'ai essayé quelques configurations différentes à l'aide de Netconn, TCP et même UDP, mais toutes les configurations échouer lorsque je tente de vous connecter. Je pense donc que je manque quelque chose d'assez important dans la configuration avant d'appeler Connect, mais je ne peux pas figurer ce qui ne va pas. P>

int main(void)
{
  HAL_Init();
  SystemClock_Config();

  MX_GPIO_Init();
  MX_USART3_UART_Init();
  Print("USART init ok\n");
  MX_USB_OTG_FS_PCD_Init();
  Print("USB pcd init ok\n");
  MX_LWIP_Init();
  Print("LWIP init ok\n");

  struct tcp_pcb * tcp_client = {0};
  tcp_client = tcp_new();


  if(tcp_client != 0)
  {
      Print("tcp_new ok\n");
      err_t error = {0};
      error = tcp_bind(tcp_client, IP_ADDR_ANY);

      if(error == ERR_OK)
      {
          Print("tcp_bind ok\n");
          err_t errorConnect = {0};
          struct ip4_addr remoteIP;
          IP4_ADDR(&remoteIP, 192, 168, 127, 250);
          errorConnect = tcp_connect(tcp_client, &remoteIP, 4002, tcpConnect);

          if(errorConnect == ERR_OK)
          {
              Print("tcp_connect ok\n");
          }
          else
          {
// I end up here with ERR_RTE as a result
              Print("Error: tcp_connect \n");
          }
      }
      else
      {
          Print("Error: tcp_bind\n");
      }
  }
  else
  {
      Print("Error: tcp_new faild\n");
  }

  Print("DONE!\n\n");

  while (1)
  {

  }
}


1 commentaires

Comment le système est-il connecté au réseau? Où est l'hôte que vous essayez de vous connecter? Sur le même réseau? Sur un réseau différent mais toujours "dans le même bâtiment"? Quelque part sur un réseau distant?


4 Réponses :


0
votes

Je l'ai fait fonctionner maintenant en mettant en place une adresse IP locale et de Netmask, iPaddr_any était la voie à suivre, mais j'avais besoin de définir une iPaddress spécifique pour qu'il réussisse à vous connecter.


0 commentaires

0
votes

Vous pouvez vous connecter comme dans l'exemple suivant à l'aide de NetConn

struct netconn *nc;
ip_addr_t remote_ip;
ip4addr_aton("192.168.127.250", &remote_ip);

nc = netconn_new(NETCONN_TCP);
volatile err_t res;
res = netconn_connect(nc, &remote_ip, 4002);


0 commentaires

0
votes

Configuration de l'adresse IP locale et de Netmask pourrait le faire fonctionner. Mais la cause première de l'ERR_RTE (problème de routage) est que la pile TCP / IP n'a pas fini de configurer l'IP / Netmask / GW avant que NetConn_Connect soit appelé. Cela devrait être une erreur parce que la carte IP / Netmask / GW est probablement vide à cette époque.

La solution serait retarder NetConn_Connect () jusqu'à ce que la configuration IP appropriée soit effectuée.


0 commentaires

0
votes

J'ai le même problème que je n'ai pas pu résoudre, même si je suis sur un autre appareil. Avez-vous essayé de changer xxx

à xxx

sinon comme indiqué ICI

Si le port est spécifié sous zéro, la fonction sélectionne un port disponible.


0 commentaires