c语言 - LwIP Clilent无法建立连接



我想连接两个F746ZG板,以便它们可以通过TCP进行通信。我正在使用带有netconn API的LwIP的STM实现。IP地址是通过DHCP提供的,但它总是相同的地址。此外,地址与期望的值匹配。我面临的问题是客户端似乎无法建立连接。我将连接绑定到端口8880。由于我遇到了这个问题,我编写了一个调试客户端,它应该定期向服务器发送预定义的消息。下面是客户端的代码:

static void tcpecho_client_thread(void const *arg)
{
struct netconn *xNetConn = NULL;
err_t bind_err, connect_err;
char* b_data = "OK"; // Data to be sent
uint16_t b_len = sizeof ( b_data );
IP4_ADDR(&local_ip, IP_ADDR0_CLIENT, IP_ADDR1_CLIENT, IP_ADDR2_CLIENT, IP_ADDR3_CLIENT);
IP4_ADDR(&pc_ip, IP_ADDR0_PC, IP_ADDR0_PC, IP_ADDR2_PC, IP_ADDR3_PC);
xNetConn = netconn_new ( NETCONN_TCP );
if (xNetConn != NULL){
bind_err = netconn_bind ( xNetConn, &local_ip, TCP_PORT_NETCONN );
if(bind_err == ERR_OK){
// Try to connect to server
for(;;){
connect_err = netconn_connect ( xNetConn, &pc_ip, TCP_PORT_NETCONN);
if (connect_err == ERR_OK){
// We are connected
while(1){
BSP_LED_On(LED1);
netconn_write(xNetConn, b_data, b_len, NETCONN_COPY);
vTaskDelay(1000); // To see the result easily in Comm Operator
}
}
}
}else{
// Failed to bind the connection
BSP_LED_On(LED3);
}
}else{
// Failed to allocate a new connection
BSP_LED_On(LED3);
}
}

当我调试这个时,netconn_connect从未设法实际连接到某些东西。由于我能够ping板并得到响应,我很困惑,这里出了什么问题。我试图使用Hercules在我的PC上设置一个TCP服务器,以便板可以连接到它,但这也不起作用。使用Wireshark,我可以看到对我的ping命令的响应,但我没有看到任何指示电路板试图连接到我的PC的东西。我已经在第二块板上测试了相应的服务器,但运行良好。我可以用Hercules连接到它并发送数据,所以我怀疑LwIP堆栈有什么根本错误。

我能猜到的是,我搞砸了netconn_bind,我不是100%确定你应该绑定到什么IP连接。它目前的方式,是我如何阅读文档。对于服务器,我已将其绑定到IP_ADDR_ANY。除此之外,我的实现主要与您可以在网上找到的示例(例如LwIP Wiki)相匹配。

我已经找出问题所在了。在我删除netconn_bind调用后,一切都对我很好。

相关内容

  • 没有找到相关文章

最新更新