OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4378|回复: 2

tcp_connected函数问题求助

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2019-9-8
在线时间
3 小时
发表于 2019-10-21 22:48:16 | 显示全部楼层 |阅读模式
1金钱
tcp_connected函数连接成功会调用,那err是不是一定为ERR_OK。为什么还需要判断err是否为ERR_OK?当err不为ERR_OK还会调用tcp_connected吗?不是调用tcp_err吗

[Z0@65MNZHK9~Y(~UHCANIE.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2020-1-17
在线时间
16 小时
发表于 2020-1-17 16:15:24 | 显示全部楼层
楼主,我蹭一下帖子,今天测试TCP Client通信,连接不上,经过测试也是tcp_connect这个函数的问题, tcp_connect(tcppcb, &rmip_addr, TCP_CLIENT_PORT, tcp_client_connected);并不能成功回调到 tcp_client_connected ,原因思考和搜资料了半天也不知道为什么,请求大虾给点解决思路!!!!
回复

使用道具 举报

2

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2020-1-17
在线时间
16 小时
发表于 2020-1-17 16:21:50 | 显示全部楼层
rsl 发表于 2020-1-17 16:15
楼主,我蹭一下帖子,今天测试TCP Client通信,连接不上,经过测试也是tcp_connect这个函数的问题, tcp_co ...

调用 tcp_connect(tcppcb, &rmip_addr, TCP_CLIENT_PORT, tcp_client_connected);之后
我是用printf打点测试的,发现程序进不去 tcp_client_connected 回调函数
//lwIP TCP连接建立后 调用回调函数
err_t tcp_client_connected(void *arg, struct tcp_pcb *tpcb, err_t err)
{
  printf("run to tcp_client_connected.\r\n");
        struct tcp_client_struct *es = NULL;  
        if(err == ERR_OK)   
        {
    printf("tcp_client_connected -> err == ERR_OK.\r\n");
                es = (struct tcp_client_struct*)mem_malloc(sizeof(struct tcp_client_struct));//申请内存
                if(es != NULL)//内存申请成功
                {
      printf("tcp_client_connected -> es != NULL.\r\n");
                        es->state=ES_TCPCLIENT_CONNECTED;//状态为连接成功
                        es->pcb=tpcb;
                        es->p=NULL;
                        tcp_arg(tpcb,es);//使用es更新tpcb的callback_arg
                        tcp_recv(tpcb,tcp_client_recv);//初始化LwIP的tcp_recv回调功能
                        tcp_err(tpcb,tcp_client_error);//初始化tcp_err()回调函数
                        tcp_sent(tpcb,tcp_client_sent);//初始化LwIP的tcp_sent回调功能
                        tcp_poll(tpcb,tcp_client_poll,1);//初始化LwIP的tcp_poll回调功能
      //标记连接到服务器了
                        tcp_client_flag |= 1<<5;
                        err = ERR_OK;
                }
    else
                {
      printf("tcp_client_connected -> es == NULL.\r\n");
                        tcp_client_connection_close(tpcb,es);//关闭连接
                        err = ERR_MEM;//返回内存分配错误
                }
        }
  else
        {
    printf("tcp_client_connected -> err != ERR_OK.\r\n");
                tcp_client_connection_close(tpcb,0);//关闭连接
        }
        return err;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 16:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表