OpenEdv-开源电子网

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

uIP接收数据丢失

[复制链接]

24

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-8-29
在线时间
3 小时
发表于 2012-11-25 21:55:58 | 显示全部楼层 |阅读模式
实验52中的文件: tcp_client_demo.c 中

if (uip_newdata())
{
if((tcp_client_sta&(1<<6))==0) //收到过数据并且已经处理/还未收到过数据
{
if(uip_len>199)
{   
((u8*)uip_appdata)[199]=0;
}    
    strcpy((char*)tcp_client_databuf,uip_appdata);      
tcp_client_sta|=1<<6;//表示收到客户端数据
}  
}else if(tcp_client_sta&(1<<5))//有数据需要发送

上述中的字节复制:  strcpy((char*)tcp_client_databuf,uip_appdata);  如果中间某个字节的值为0x00,则后面的所有字节全部丢失。

由于有N多程序已经通过服务器端程序在用,所以不能修改服务器端程序。请教大师们: 如何从接收进来的字节完整低复制到 tcp_client_databuf 中???








我白天是个程序员,晚上就是个有抱负的演员。住在天朝的魔都,有条同名的狗......
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2012-11-25 22:51:48 | 显示全部楼层
回复【楼主位】liwanfei:
---------------------------------
修改我们定义的协议,不以0作为结束,同时不使用strcpy了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-8-29
在线时间
3 小时
 楼主| 发表于 2012-11-26 09:26:15 | 显示全部楼层
谢谢大师。我想直接复制接收到的字节数组,就是不知道怎么复制哪个字节数组?现在知道进来的字节数组的长度为uip_len。

接收到字节的数组是哪个呢?
我白天是个程序员,晚上就是个有抱负的演员。住在天朝的魔都,有条同名的狗......
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2012-11-26 10:20:50 | 显示全部楼层
uip_appdata
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-8-29
在线时间
3 小时
 楼主| 发表于 2012-11-26 11:51:09 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
if((tcp_client_sta&(1<<6))==0)  //还未收到数据、或已收的数据已经被处理:
{
//接收字节:
if(uip_len>500)
{    
((u8*)uip_appdata)[499]=0;
}
else
{
((u8*)uip_appdata)[uip_len+1]=0;
}

for(i=0;i<uip_len;i++)
{
   tcp_client_databuf = uip_appdata;
}
tcp_client_sta|=1<<6; //表示收到客户端数据
}   
}
else if(tcp_client_sta&(1><<5)) //有数据需要发送


编译时报错的:
..\uIP-APP\tcp_client_demo.c(88): error:  #852: expression must be a pointer to a complete object type
错误指向: tcp_client_databuf = uip_appdata;

我想直接复制接收到字节的那个数组啊,我跟踪了uip_buff这个数组,这个数组里的不是我发出去的字节。

原子大师,求助啊!
我白天是个程序员,晚上就是个有抱负的演员。住在天朝的魔都,有条同名的狗......
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165462
金钱
165462
注册时间
2010-12-1
在线时间
2114 小时
发表于 2012-11-26 14:24:23 | 显示全部楼层
for(i=0;i<uip_len;i++) 

   tcp_client_databuf = ((u8*)uip_appdata)
} >
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-8-29
在线时间
3 小时
 楼主| 发表于 2012-11-26 15:18:59 | 显示全部楼层
成功了,太感谢了,原子弹就是厉害!!!
我白天是个程序员,晚上就是个有抱负的演员。住在天朝的魔都,有条同名的狗......
回复 支持 反对

使用道具 举报

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2012-11-29
在线时间
0 小时
发表于 2013-4-8 22:12:00 | 显示全部楼层
buf 加个长度声明

uIP 或 lwIP 很灵活,号称轻量级的tcp/ip协议。 
之前用DM9000AEP / DM9000CEP +uIP  lwIP 做以太网络协议时,仔细研究过一段时间,有这方面兴趣可交流。 
jonny.chu@qftek.com  Tel:13554902206
MICREL KSZ8851SNL   , WIZNET W5500  , SPI接口硬件简单,嵌入式网络芯片
回复 支持 反对

使用道具 举报

24

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-8-29
在线时间
3 小时
 楼主| 发表于 2013-4-11 23:18:06 | 显示全部楼层
给前辈大师谢过了。
我白天是个程序员,晚上就是个有抱负的演员。住在天朝的魔都,有条同名的狗......
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2013-5-21
在线时间
0 小时
发表于 2013-5-21 10:51:54 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
求教一下原子哥,我在用UIP 进行WEB通信时,芯片ENC28J60,单片机发数据时会丢数据,发送一帧数据不能超过1200字节左右,超过字节部分的数据浏览器就会收不到,那个芯片最大可以发送1500的数据,我改成一次发送给500字节数据,等待ACK进行多次发送,超过1200左右字节浏览器还是会收不到,请教一下原因?
回复 支持 反对

使用道具 举报

头像被屏蔽

88

主题

231

帖子

2

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-11
在线时间
40 小时
发表于 2013-5-21 11:01:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2012-11-29
在线时间
0 小时
发表于 2013-11-15 11:53:37 | 显示全部楼层
严重建议:
MICREL KSZ8851SNL 性能、价格比台系芯片强很多,特别插拔不能link的bug不存在。另外SPI接口,硬件线路及软件驱动都容易。

WIZNET W5500 ,硬件集成TCP/IP协议栈。不要哪么费心费力去调试uIP lwIP之类的东东,硬件SPI接口,线路简单。

还有SMSC的相关芯片,性能超强。某些台系芯片在系统上电启动之后再插网线无法LINK这种低级bug要小心。

哪些用台系芯片的,要好好考虑一下芯片BUG,及原厂及代理商是否能出质量承诺书,及硬件软件的复杂程度。
有更好的,为什么选它 ?
MICREL KSZ8851SNL   , WIZNET W5500  , SPI接口硬件简单,嵌入式网络芯片
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-2-23
在线时间
1 小时
发表于 2014-5-21 11:21:11 | 显示全部楼层
回复【7楼】liwanfei:
---------------------------------
嘎嘎~~
回复 支持 反对

使用道具 举报

3

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2016-11-5
在线时间
63 小时
发表于 2017-1-3 21:14:19 | 显示全部楼层
我也遇到类似问题, 发送16进制数据 遇到 0X00 后面的数据都丢失了。具体怎么修改,没找到要改的地方,求具体操作!
回复 支持 反对

使用道具 举报

2

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2016-9-21
在线时间
50 小时
发表于 2017-8-9 10:44:26 | 显示全部楼层
codedemo 发表于 2017-1-3 21:14
我也遇到类似问题, 发送16进制数据 遇到 0X00 后面的数据都丢失了。具体怎么修改,没找到要改的地方,求具 ...

赋值部分的函数要改,原先用的是针对字符串的函数,遇到00会自动结束的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-20 12:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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