tcpip

阅读 / 问答 / 标签

uip里面tcpip怎么收发数据的

在 uIP中,主动发送数据有两个方法。 一种是用uip_input:当检测到新的数据时,调用uip_input(),把接收到的IP包解包,然后提取出用户数据,然后调用app_call,在app_call中调用uip_send()或者uip_udp_send()来发送数据。 另一种是用uip_periodic(),即在主循环超时仍没有接收到新数据时,调用 uip_periodic(),像uip_input那样在其里面调用app_call,再调用uip_send()或者uip_udp_send()来发送数据。 在这里提示一下,uip_input()与uip_periodic()其实是同一个函数,他们的本体是uip_process();一个作用是对IP包进行解包,并提取出用户数据,另一个作用是对用户的数据进行打包,使之符合IP包格式,等待发送。所以,uip_process()里面会调用app_call(),让用户包把数据从appdata取出,或者把要发送的数据填进去 (sappdata)。 好了,我想说的就是,当有新数据时,会调用uip_input,以及 app_call,在app_call中用户得到appdate里面的数据,对之进行处理或者执行其他命令,之后如果要反馈信息,则紧接着使用 uip_send来把数据填进appdate(sappdate),当uip_input返回后,就会调用nic_send(底层网卡 (enc28j60,RTL8019之类)的驱动函数)来把发送缓冲里面已经封装好的的整个IP包发送出去。 当你要发送的数据小于一个IP包的大小时(大小可用 UIP_BUFSIZE 指定,最大不超过1500),是没问题的。数据会完整的通过网路发送。当你要发送的文件超过IP包的大小时,就要分包发送,就是把一段数据分成几个IP包发送。