本帖最后由 kaly_liu 于 2013-6-13 15:28 编辑
在以太网驱动底层改变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客户端上;
|