当我尝试连接到服务器时,LWIP 中的路由错误

Posted

技术标签:

【中文标题】当我尝试连接到服务器时,LWIP 中的路由错误【英文标题】:Routing error in LWIP when i try to connect to server 【发布时间】:2020-09-27 07:23:12 【问题描述】:

我尝试使用 LWIP 连接到远程主机,但尝试连接时失败并出现路由错误。

我已经使用 netconn、tcp 甚至 udp 尝试了一些不同的设置,但是当我尝试连接时所有设置都失败了。所以我认为在调用 connect 之前我在设置中遗漏了一些相当重要的东西,但我不知道出了什么问题。

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)
  

  

我使用 STM32CubeIDE 和 LWIP 已添加为中间件, 我使用的卡是 ST nucleo F746ZG

卡直接连接到我的电脑,我可以在我电脑的网络设置中看到它连接。所以某种形式的谈判正在发生。

【问题讨论】:

系统是如何联网的?您尝试连接的主机在哪里?在同一个网络上?在不同的网络上,但仍然“在同一栋楼里”?远程网络上的某个地方? 【参考方案1】:

我现在通过设置本地 IP 地址和网络掩码让它工作,我认为 IPADDR_ANY 是要走的路,但我需要设置一个特定的 ipaddress 才能成功连接。

【讨论】:

【参考方案2】:

您可以使用 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);

【讨论】:

【参考方案3】:

设置本地 IP 地址和网络掩码可以使其正常工作。但是 ERR_RTE(路由问题)的根本原因是 TCP/IP 堆栈在调用 netconn_connect 之前还没有完成 ip/netmask/gw 的设置。那应该是错误的,因为当时 ip/netmask/gw 可能是空的。

解决方案是延迟 netconn_connect() 直到正确的 IP 配置完成。

【讨论】:

【参考方案4】:

我有同样的问题,但我无法解决,虽然我在不同的设备上.. 你试过改变吗

error = tcp_bind(tcp_client, IP_ADDR_ANY);

error = tcp_bind(tcp_client, IP_ADDR_ANY, 4002);

否则如here所述

如果端口指定为零,则函数选择一个可用端口。

【讨论】:

以上是关于当我尝试连接到服务器时,LWIP 中的路由错误的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试在命令提示符下连接到 mongodb 时,它会显示错误如何解决?

当我尝试连接到 mongodb 时出现这些错误

当我尝试连接到 mongodb 时出现这些错误

当我将多个客户端同时连接到 Java 服务器时,套接字写入错误

如何使用远程桌面连接到 SQL Server

Postgres 无法连接到服务器