最近在使用udp通讯的过程中遇到了这么一个问题,服务端是用liunx来搭建的,客户端使用的时GD32芯片建立的,正常情况下,只要udp双方都绑定了对方的IP和端口号就可以发送数据了。
现在在服务端重启系统之后,就接收不到客户端发送过来的数据了。后面又拿了另外一块板子来进行测试。发现在主控板重启之后,两分钟之内是接收不到数据的,后面把那块发不出去数据的板子下载了另一个版本的代码,在主控板重启系统之后又可以接收到数据了,这里解释一下,其实两份代码是一样的,因为是我和同事两个人开发,基础的网络是一样的,唯一不同的是,它的代码中IP地址都是直接写进去的,我的则是通过先写进flash,然后从里面获取,本质是一样的。
后面又进行了多次实验,还是一样的结果,当天晚上就没有再调,按理来说重启对于udp客户端和服务端之间就没有相互影响的,为了验证这个想法,先把主控板的网线断开,重启之后再接上网线,这样应该对客户端是没有任何影响的。但是结果还是收不到数据,想着把原因归结于主控板服务端建立的有问题,因为另一个板子的程序在重启之后可以发送信息。这个结论又被自己给推翻了,在连接网线的同时,重启主控板,在接受不到数据时,用网路助手连接客户端,发现客户端发不出数据。这时也慌了,问题到底出在哪里?
既然无法定位问题,那总有方法去解决吧,我们发现每当客户端重启之后数据都会发送的出去。在程序中用了两种方法,第一种是重新绑定本地IP和远端IP和端口号,发现问题还没有解决,于是采取另一种方法,启用软件重启系统。再发送心跳包之后没有接收到数据回复就重启系统。其实这也是一种断网重连的方式,以前用的断网重连重新绑定就行了。