OpenEdv-开源电子网

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

lwip tcp_client发送数据的问题

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-3-25
在线时间
0 小时
发表于 2015-3-29 20:34:44 | 显示全部楼层 |阅读模式
5金钱
lwip tcp_client发送数据必须放在tcp_client_poll()这个回调函数里吗?
原子给的例程
[mw_shl_code=c,true]err_t tcp_client_poll(void *arg, struct tcp_pcb *tpcb) { err_t ret_err; struct tcp_client_struct *es; es=(struct tcp_client_struct*)arg; if(es!=NULL) //连接处于空闲可以发送数据 { if(tcp_client_flag&(1<<7)) //判断是否有数据要发送 { es->p=pbuf_alloc(PBUF_TRANSPORT, strlen((char*)tcp_client_sendbuf),PBUF_POOL); //申请内存 pbuf_take(es->p,(char*)tcp_client_sendbuf,strlen((char*)tcp_client_sendbuf)); //将tcp_client_sentbuf[]中的数据拷贝到es->p_tx中 tcp_client_senddata(tpcb,es);//将tcp_client_sentbuf[]里面复制给pbuf的数据发送出去 tcp_client_flag&=~(1<<7); //清除数据发送标志 if(es->p)pbuf_free(es->p); //释放内存 }else if(es->state==ES_TCPCLIENT_CLOSING) { tcp_client_connection_close(tpcb,es);//关闭TCP连接 } ret_err=ERR_OK; }else { tcp_abort(tpcb);//终止连接,删除pcb控制块 ret_err=ERR_ABRT; } return ret_err; } [/mw_shl_code]
但是要发送一个很大数据,就出现问题,数据末尾发送的全是00000000000
jpeg_data_buf大概有120K,发送到20k左尾发送的就全是0
我改的代码
jpeg_data_buf的长度等于IMAGEBUFLOOP*1024+IMAGEBUFLOOP 
[mw_shl_code=c,true]//lwIP tcp_poll的回调函数 err_t tcp_client_poll(void *arg, struct tcp_pcb *tpcb) { err_t ret_err; struct tcp_client_struct *es; u16 image_send_count; // 循环发送次数 es=(struct tcp_client_struct*)arg; if(es!=NULL) //连接处于空闲可以发送数据 { if(tcp_client_flag&(1<<7)) //判断是否有数据要发送 { tcp_client_flag&=~(1<<7); //清除数据发送标志 for(image_send_count = 0; image_send_count < IMAGEBUFLOOP; image_send_count++) { delay_ms(3); // 防止发送过快导致收不到ACK // lwip_periodic_handle(); es->p=pbuf_alloc(PBUF_TRANSPORT, 1024,PBUF_POOL); //申请内存 pbuf_take(es->p,(char*)(jpeg_data_buf+image_send_count*1024),1024); //将tcp_client_sentbuf[]中的数据拷贝到es->p_tx中 tcp_client_senddata(tpcb,es);//将tcp_client_sentbuf[]里面复制给pbuf的数据发送出去 if(es->p)pbuf_free(es->p); //释放内存 } if(IMAGEBUFLEFT) // jpeg_data_buf 不为1K的整数倍 { delay_ms(3); // lwip_periodic_handle(); es->p=pbuf_alloc(PBUF_TRANSPORT, IMAGEBUFLEFT,PBUF_POOL); //申请内存 pbuf_take(es->p,(char*)(jpeg_data_buf+image_send_count*1024),IMAGEBUFLEFT); //将tcp_client_sentbuf[]中的数据拷贝到es->p_tx中 tcp_client_senddata(tpcb,es);//将tcp_client_sentbuf[]里面复制给pbuf的数据发送出去 if(es->p)pbuf_free(es->p); //释放内存 } }else if(es->state==ES_TCPCLIENT_CLOSING) { tcp_client_connection_close(tpcb,es);//关闭TCP连接 } IMAGESENDOK=1; // 标记数据发送完成 ret_err=ERR_OK; }else { tcp_abort(tpcb);//终止连接,删除pcb控制块 ret_err=ERR_ABRT; } return ret_err; } [/mw_shl_code]
我想问的是这是什么原因?有没有可能将发送函数独立出来?如果可以应该怎么做?

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

使用道具 举报

9

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-5-10
在线时间
12 小时
发表于 2015-3-29 21:00:46 | 显示全部楼层
通过回调处理数据是lwIP的原始接口,lwIP另外提供了BSD标准的socket接口。不知道原子的demo有没有用到。

发送的数据全是0你先定位一下是内存拷贝那时出错了,还是数据传入到底层但是底层已经发生内存数据处理异常了,因为根据你的描述,数据已经发送出去了,但是收到的全是0对吗?
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-3-25
在线时间
0 小时
 楼主| 发表于 2015-3-29 21:26:12 | 显示全部楼层
回复【2楼】jinfeng:
---------------------------------
应该是数据传入到底层但是底层已经发生内存数据处理异常了,BSD的标准接口是要移植一个操作系统才能用吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-3-29 22:25:49 | 显示全部楼层
回复【3楼】小小小白:
---------------------------------
发送jepg数据,不要用strlen来判断长度了!!!
strlen遇到0就结束.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-3-29 22:26:49 | 显示全部楼层
回复【3楼】小小小白:
---------------------------------
BSD标准接口需要操作系统支持的,我们已经移植了的,NETCONN接口的实验就是有操作系统的,你可以在NETCONN试验的基础上使用Socket
开往春天的手扶拖拉机
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-3-25
在线时间
0 小时
 楼主| 发表于 2015-3-30 09:42:20 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
并没有使用strlen()
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2015-3-25
在线时间
0 小时
 楼主| 发表于 2015-3-30 09:42:31 | 显示全部楼层
回复【5楼】zuozhongkai:
---------------------------------
好的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-3-30 18:51:47 | 显示全部楼层
回复【6楼】小小小白:
---------------------------------
 es->p=pbuf_alloc(PBUF_TRANSPORT, strlen((char*)tcp_client_sendbuf),PBUF_POOL);   //申请内
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

8

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2013-9-27
在线时间
26 小时
发表于 2015-3-31 20:49:37 | 显示全部楼层
回复【8楼】正点原子:
这个是第一张图片里原子哥的例程的代码,第二张图片里的才是楼主写的代码
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-3-31 22:10:45 | 显示全部楼层
回复【9楼】amyoubo:
---------------------------------
额,看错,不好意思。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-5-30
在线时间
2 小时
发表于 2015-6-24 09:09:45 | 显示全部楼层
回复【3楼】小小小白:
---------------------------你好我的这个例程在探索者开发板上抱不动啊,下载程序后连液晶屏上都没有显示,你有没遇到这种请款
回复

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-5-30
在线时间
2 小时
发表于 2015-6-24 09:15:35 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
原子老师,我买的探索者开发板下载完(网络实验4 RAW_TCP客户端实验)(网络实验8 NETCONN_TCP 客户端)这两个实验怎么也接收不到数据,发送也不行,液晶屏上也没任何数据,但是(网络实验9 NETCONN_TCP 服务器)这个实验就可以请问是什么问题啊??
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-6-24 22:55:18 | 显示全部楼层
回复【12楼】学习小空间:
---------------------------------
你是下载我们的最新的例程么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-5-30
在线时间
2 小时
发表于 2015-6-25 08:25:57 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------
买板子的时候,光盘里的那个
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-6-25 23:23:33 | 显示全部楼层
回复【14楼】学习小空间:
---------------------------------
我们测试ok哦
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-5-30
在线时间
2 小时
发表于 2015-6-26 08:56:36 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------
读出来的LCD ID是0
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-6-27 19:36:44 | 显示全部楼层
回复【16楼】学习小空间:
---------------------------------
是我们的开发板和lcd么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 18:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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