1.今天客户反馈了个问题:使用UDP通信,在电表(类服务器)不断电的情况下,更换集中器(类客户端)(IP不变,MAC变了),通信会失败,前提条件:由交换机组成的网络

按照理论上来讲,应该是会有问题的。后面就补习了下ARP相关的知识。每个主机和路由器都会有ARP cache,无论主机是跑的是软件协议栈(如Lwip等),还是硬件协议栈(w5500)。ARP是为上层的协议服务的。

在不断电的情况下,电表中缓存着前一个集中器的IP和MAC映射关系,如果更换集中器之后且IP不变,电表进行UDP通信使用的还是之前的映射关系,所以会通信异常。

2.另一个客户反馈的W5500的TCP连接问题,connect。如果服务器断了,客户端会一直死在连接的while里面不断请求连接。很明显,使用的是类似阻塞模式,但是超时中断未发生。A,改为非阻塞方式,立即返回状态。B,设置中断及合理的超时时间(TCPto)。SIMR,SIR及RTR, RCR

while ( IINCHIP_READ(Sn_SR(s)) != SOCK_SYNSENT )
{
if(IINCHIP_READ(Sn_SR(s)) == SOCK_ESTABLISHED
{
	break;
}
if (getSn_IR(s) & Sn_IR_TIMEOUT)
{
	IINCHIP_WRITE(Sn_IR(s), (Sn_IR_TIMEOUT)); // clear TIMEOUT Interrupt
	ret = 0;
	break;
}
}