CC3000通信往不存在的IP地址发送UDP数据报的问题?
我在测试UDP通信的时候发现一个问题。就是用UDP向一个不存在的IP地址发一个数据,HostFlowControlConsumeBuff函数中(在socket.c文件里)的tSLInformation.usNumberOfFreeBuffers变量每发送一次值就减小1次,发送6次之后,模块就不能通信了,tSLInformation.usNumberOfFreeBuffers变成0了。但是往一个存在的IP地址,发送数据就没有这个现象,值就是正常的!。不知道你有没有碰到这个情况,一般怎么解决!
按道理说UDP通信和IP地址应该没有关系啊!
就这地方,我电脑是192.168.3.104,就是0x6803a8c0。正常
我把IP地址改为0x4003a8c0就不正常了!
以下是我用串口打印出的信息:
IP地址不存在的时候tSLInformation.usNumberOfFreeBuffers的值就会一直减小,减小到0时就不能通信和收发数据了!但是IP地址存在的时候就正常,这个值会在5,6之间不停的变换!
你发送的循环每个数据包之间有延时吗?
有啊!关键是我往存在的IP地址发送数据就没有问题啊!
这个ip地址是跟CC3000同网段的吗?比如你从192.168.1.101 发到192.168.1.102,如果是这样的话,如果这个地址不存在的话,那么arp是查找不到mac 地址,数据包只能pending在CC3000内部,等超时然后flush掉,但是最终结果就是一个包也不出去。
如果你是从192.168.1.101 发送到另外一个网段,比如193.168.1.101,应该是没有问题的。数据包会先送到AP。
那一般多久才会被被超时flush掉?一般这个问题怎么解决?
你用什么MCU的呀!
一般是2s,这个问题你只能在application里解决,udp是无连接的,你的这种情况如果用tcp的话,连接根本建立不了,也就不会有这样的问题。如果你不关心udp server的话,你也可以用broadcast 发送数据包。
好的,非常感谢!