打印

ENC28J60构建TCP服务器 数据正常发送一次而已??

[复制链接]
3315|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kaly_liu|  楼主 | 2013-6-13 15:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在以太网驱动底层改变TCP要发送的数据,只改了数据的值,没有改变数据的长度,可以正常的实现发送。
void dev_send(void)
{        
if(uip_appdata[1]=='1')
{
//uip_len = uip_len+1;
//uip_buf[uip_len-1]='9';
uip_appdata[1]='9'
lzm_tcpchksum();//自己写的 IP TCP  校验和代码
}
enc28j60Packet_len(uip_len);
enc28j60Packet_data(uip_len, uip_buf);
enc28j60Packet_Send();
}
但是,当我改变了数据的长度后,如下代码:
void dev_send(void)
{        
if(uip_appdata[1]=='1')
{
uip_len = uip_len+1;
uip_buf[uip_len-1]='9';
//uip_appdata[1]='9'
lzm_tcpchksum();//自己写的 IP TCP  校验和代码
}
enc28j60Packet_len(uip_len);
enc28j60Packet_data(uip_len, uip_buf);
enc28j60Packet_Send();
}

这样就只能发送一次,成功的发送一次了,发不了第二次,不知道哪里出问题了呢???
抓包,发现了个问题额:
代码如下:


如果收到数据 "C229" 原样返回;
如果收到数据"C12"就把数据改为"C229"返回(这几就修改了数据的长度了)

我发送数据 "C229"正常返回"C229";如图片中的1、2所示;
发送"C12"第一次正常返回 "C229",但是后面会多一条单片机给PC机的包;(图片中的 3 所示)

然后我再点击发送,发现还可以发送数据"C12"出去,而且返回的数据包显示的是数据时9,但是没有显示在TCP客户端上;


这是我抓的新数据: tcp packet3.zip (555 Bytes)
这是我的抓包工具 iptool,免安装的,可以用这个打开的额:https://bbs.21ic.com/forum.php?mod=attachment&aid=MTc4MjcwfDViZDBkZGVjfDEzNzExMDg3MzR8MTAxNjAzNXw1NjA3MzY%3D
这是利用UIP0.9代码弄的,结合单片机和ENC28J60进行的设计,ENC28J60的代码驱动是参考网络上的一些代码的,里面设置的好了初始化状态:自动填充/CRC等功能。我通过对修改后的数据重新进行校验和的计算,在没有改变数据长度的情况下是可以正常工作的。比如:C1222变为 C1223 C2354 等都是可以的,只要不改变长度;但是要是我改变了长度,如吧 C12 改变为了 C229 长度变长了1,那么可以成功的发送一次出去,第二次发送就出现问题了额····················

相关帖子

沙发
kaly_liu|  楼主 | 2013-6-13 17:02 | 只看该作者
有牛人不,猜想一下是哪里的不对啊??没什么思路了额

使用特权

评论回复
板凳
dirtwillfly| | 2013-6-14 08:11 | 只看该作者
在你发出一个数据包后会回有一个ACK包
单片机上uip在收到ACK包后会产生acked事件

有没有可能是这里的原因

使用特权

评论回复
地板
xyz769| | 2013-6-14 11:15 | 只看该作者
新手的话,不要总想着在底层改动。因为你不懂上层。。

去最顶层改数据,保证你爽歪歪。。

使用特权

评论回复
5
kaly_liu|  楼主 | 2013-6-14 14:32 | 只看该作者
顶层改过了,可以,但是不是我想要的那种。
现在就想在底层改,而且想实现:先多次将数据写入网卡缓冲区(当然不大于1500了),然后,再一次性发出去。

使用特权

评论回复
6
woshigeshagua| | 2013-6-14 15:31 | 只看该作者
你好,我正在学习ENC28J60+CC2530入网,对这部分一点都不了解,希望您能给予我一些帮助!谢谢!QQ:1051343898

使用特权

评论回复
7
kaly_liu|  楼主 | 2013-6-15 08:57 | 只看该作者
woshigeshagua 发表于 2013-6-14 15:31
你好,我正在学习ENC28J60+CC2530入网,对这部分一点都不了解,希望您能给予我一些帮助!谢谢!QQ:10513438 ...

你可以在网上搜索到: 单片机 uip =>作为关键字,可以收到很多的Demo和教程,你可以看看。大多都是一样的,就是单片机型号不一样,这个要自己移植的。

使用特权

评论回复
8
xyz769| | 2013-6-15 16:51 | 只看该作者
那你要把UI吃透再在底层搞事。。
我上次回复过一个贴子,也是想多次写数据,一次发送的。不会就是你吧?

使用特权

评论回复
9
kaly_liu|  楼主 | 2013-6-18 11:43 | 只看该作者
哎 就是我了
那我再研究研究啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

344

帖子

3

粉丝