UIP0.9+ENC28J60构建TCP服务器 数据发送问题

[复制链接]
2546|5
 楼主| kaly_liu 发表于 2013-6-7 16:39 | 显示全部楼层 |阅读模式
本帖最后由 kaly_liu 于 2013-6-13 15:28 编辑

在以太网驱动底层改变TCP要发送的数据,只改了数据的值,没有改变数据的长度,可以正常的实现发送。
  1. void dev_send(void)
  2. {        
  3. if(uip_appdata[1]=='1')
  4. {
  5. //uip_len = uip_len+1;
  6. //uip_buf[uip_len-1]='9';
  7. uip_appdata[1]='9'
  8. lzm_tcpchksum();//自己写的 IP TCP  校验和代码
  9. }
  10. enc28j60Packet_len(uip_len);
  11. enc28j60Packet_data(uip_len, uip_buf);
  12. enc28j60Packet_Send();
  13. }

但是,当我改变了数据的长度后,如下代码:
  1. void dev_send(void)
  2. {        
  3. if(uip_appdata[1]=='1')
  4. {
  5. uip_len = uip_len+1;
  6. uip_buf[uip_len-1]='9';
  7. //uip_appdata[1]='9'
  8. lzm_tcpchksum();//自己写的 IP TCP  校验和代码
  9. }
  10. enc28j60Packet_len(uip_len);
  11. enc28j60Packet_data(uip_len, uip_buf);
  12. enc28j60Packet_Send();
  13. }
这样就只能发送一次,成功的发送一次了,发不了第二次,不知道哪里出问题了呢???
抓包,发现了个问题额:
代码如下:

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

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

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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| kaly_liu 发表于 2013-6-8 16:09 | 显示全部楼层
本帖最后由 kaly_liu 于 2013-6-13 09:37 编辑

这是我抓的新数据:(就是楼上的截图里的数据了)
这是我的抓包工具 iptool,免安装的,可以用这个打开的额:https://bbs.21ic.com/icview-560736-1-1.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| kaly_liu 发表于 2013-6-9 08:50 | 显示全部楼层

111

本帖最后由 kaly_liu 于 2013-6-13 10:02 编辑

这是利用UIP0.9代码弄的,结合单片机和ENC28J60进行的设计,ENC28J60的代码驱动是参考网络上的一些代码的,里面设置的好了初始化状态:自动填充/CRC等功能。我通过对修改后的数据重新进行校验和的计算,在没有改变数据长度的情况下是可以正常工作的。比如:C1222变为 C1223 C2354 等都是可以的,只要不改变长度;但是要是我改变了长度,如吧 C12 改变为了 C229 长度变长了1,那么可以成功的发送一次出去,第二次发送就出现问题了额····················
 楼主| kaly_liu 发表于 2013-6-13 16:51 | 显示全部楼层
给个方向,卡在这了····不知道哪里的问题,查了下CRC,但是看了下代码是自动 填充的CRC,然后就不知道怎么办了·····
758044068 发表于 2013-6-14 09:02 | 显示全部楼层
不懂,帮顶啦:lol

评分

参与人数 1威望 +3 收起 理由
kaly_liu + 3 神马都是浮云

查看全部评分

 楼主| kaly_liu 发表于 2013-6-14 09:08 | 显示全部楼层
应该没人懂了 给你分吧 哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

344

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部