你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

即使网络已连接时lwip 的 netconn 结构体 state 仍保持 NETCONN_NONE

[复制链接]
patch1582 提问时间:2026-6-3 13:59 / 未解决

基于 LwIP_HTTP_Server_Netconn_RTOS 示例,在 FreeRTOS 上搭建了一个 Telnet 服务器。

现在我需要在程序的不同位置,通过这个连接转发 / 发送数据给客户端,因此必须知道连接状态,判断客户端是否已连接。

我用以下方法进行测试,但发现即使客户端已成功连接,conn->state 始终为 NETCONN_NONE,说明这种判断方式不可行:

void relay_str_to_socket(char *pch, int sz)

{

struct netconn *conn = {0};

conn = curr_con_get();

if (conn->state != NETCONN_NONE) {

if (netconn_err(conn) == ERR_OK) {

    netconn_write(conn, pch, sz, NETCONN_NOCOPY);

}

} }

void telnet_server_serve(struct netconn *conn) {

struct netbuf *inbuf;

err_t recv_err;

char* buf;

u16_t buflen;

char *resp_ok = "OK, data parsed successfully!\n";

char *resp_err = "ERR, data could not be parsed\n is first char '{'?\n";

// Keep the connection open to continuously handle data

while (1) {

// Read the data from the port, blocking if nothing yet there

recv_err = netconn_recv(conn, &inbuf);





if (recv_err == ERR_OK) {

    if (netconn_err(conn) == ERR_OK) {

    curr_con_set(conn);

        netbuf_data(inbuf, (void**)&buf, &buflen);

        if (buflen > 0 && buf[0] == '{') {

            // Extract data from JSON string

            int rv = ethdataDecode(&m_dat, buf);

            need_conf_set(1);  // Set signal that new command needs processing

            if (rv == OK) {

            relay_str_to_socket(resp_ok, strlen(resp_ok));

            }

        } else {

        relay_str_to_socket(resp_err, strlen(resp_err));

        }

    }

    netbuf_delete(inbuf);  // Clean up the buffer

} else if (recv_err == ERR_CLSD || recv_err == ERR_CONN) {

    // Close the connection if the client disconnected

    break;

}

} 如果在未连接时尝试发送数据,程序会卡死不返回。

收藏 评论0 发布时间:2026-6-3 13:59

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版