OpenEdv-开源电子网

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

TCP Client 发送函数

[复制链接]

13

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2018-1-11
在线时间
74 小时
发表于 2019-2-28 10:37:28 | 显示全部楼层 |阅读模式
50金钱
//此函数用来发送数据
void tcp_client_senddata(struct tcp_pcb *tpcb, struct tcp_client_struct * es)
{
        struct pbuf *ptr;
        err_t wr_err=ERR_OK;
        while((wr_err==ERR_OK)&&es->p&&(es->p->len<=tcp_sndbuf(tpcb))) //将要发送的数据加入到发送缓冲队列中
        {
                ptr=es->p;
                wr_err=tcp_write(tpcb,ptr->payload,ptr->len,1);
                if(wr_err==ERR_OK)
                {  
                        es->p=ptr->next;                        //指向下一个pbuf
                        if(es->p)pbuf_ref(es->p);        //pbuf的ref加一
                        pbuf_free(ptr);                                //释放ptr
                }else if(wr_err==ERR_MEM)es->p=ptr;
                tcp_output(tpcb);                //将发送缓冲队列中的数据立即发送出去
        }
}
我的问题
1:* es 的作用是什么?
//LWIP回调函数使用的结构体
struct tcp_client_struct
{
        u8 state;               //当前连接状
        struct tcp_pcb *pcb;    //指向当前的pcb
        struct pbuf *p;         //指向接收/或传输的pbuf
};  

2:es->p 指向什么条件?
3 :struct pbuf *ptr; 指的是什么?
4:else if(wr_err==ERR_MEM)es->p=ptr; 指的又是什么?
求大神指点

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

108

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1825
金钱
1825
注册时间
2017-9-7
在线时间
501 小时
发表于 2019-2-28 14:27:14 | 显示全部楼层
1,感觉你就是在问结构体的作用;
2,3,4,ptr是指向struct pbuf结构体类型的指针变量,es和p分别是struct tcp_client_struct和struct pbuf这两种结构体类型的变量名,并且在定义可获知,struct pbuf是struct tcp_client_struct的成员之一,es->p 代表指针变量->成员名,即指的是es中的成员p;
回复

使用道具 举报

13

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2018-1-11
在线时间
74 小时
 楼主| 发表于 2019-2-28 14:34:01 | 显示全部楼层
亦辰 发表于 2019-2-28 14:27
1,感觉你就是在问结构体的作用;
2,3,4,ptr是指向struct pbuf结构体类型的指针变量,es和p分别是struc ...

你好 ,请问 TCP Client 在发送 和 接收 同时进行时 为什么会出现 ERR = 0xFF 内存不足的错误?
回复

使用道具 举报

12

主题

108

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1825
金钱
1825
注册时间
2017-9-7
在线时间
501 小时
发表于 2019-2-28 14:44:05 | 显示全部楼层
君仁知命 发表于 2019-2-28 14:34
你好 ,请问 TCP Client 在发送 和 接收 同时进行时 为什么会出现 ERR = 0xFF 内存不足的错误?

是触发了这个条件 if(wr_err==ERR_MEM) ?若是的话去看tcp_write()函数的说明
回复

使用道具 举报

13

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2018-1-11
在线时间
74 小时
 楼主| 发表于 2019-2-28 15:48:30 | 显示全部楼层
亦辰 发表于 2019-2-28 14:44
是触发了这个条件 if(wr_err==ERR_MEM) ?若是的话去看tcp_write()函数的说明

你好,请问你用正点原子的例程能实现  TCP Client  同时发送 和 接收吗?
回复

使用道具 举报

12

主题

108

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1825
金钱
1825
注册时间
2017-9-7
在线时间
501 小时
发表于 2019-2-28 15:56:30 | 显示全部楼层
君仁知命 发表于 2019-2-28 15:48
你好,请问你用正点原子的例程能实现  TCP Client  同时发送 和 接收吗?

可以啊  裸机的和带系统的都可以 你卡在哪个地方了?
回复

使用道具 举报

13

主题

57

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2018-1-11
在线时间
74 小时
 楼主| 发表于 2019-3-1 09:37:54 | 显示全部楼层
亦辰 发表于 2019-2-28 15:56
可以啊  裸机的和带系统的都可以 你卡在哪个地方了?

方面吗?可以加个微信 或者扣扣吗?微信 :jk910510    我卡在 :用定时器 定时给 网络调试助手 发送数据 同时网络调试助手 给 stm32 发送数据 。现象 :stm32 能接收到数据,但是网络调试助手收不到开发板上传的数据; 在debug的调试下 err =0xFF ; 报的是 内存不足的错误 。   
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 21:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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