由于工作需要,做了一个连接下位机热点并通信的软件,使用udp协议。其中有一个功能,就是每隔2s检测一下本地IP,如果发现IP自动切换了,就提醒用户(防止用户在没有连接热点就打开软件)。代码如下:
IEnumerator CheckIPPeriod() { IPAddress recIP = localIP; while (true) { //每隔checkIPPeriod时间检测一次 yield return new WaitForSeconds(checkIPPeriod); localIP = GetLocalIP();//获取本地IP //因为和热点通信,所以要和remoteIP同一个网段 if (localIP.ToString().Contains(remoteIP.Substring(0, remote.ToString().LastIndexOf('.') + 1))) { if (localIP.ToString() != recIP.ToString()) { CloseUdpClient();//关掉旧的 InitializeUdpClient();//开启新的连接 //发一段数据,激活通信 SendDataToRemoteHost(new byte[] { 0, 0, 0 }, 3); warningAction?.Invoke("已连接到发动机热点", 10); } } else { warningAction?.Invoke("请连接发动机热点", 100); } recIP = localIP; } }
结果发现,这么做在安卓打包后没有任何问题,但是iOS打包后,程序会在建立网络连接时卡住,并且调试中提示这么一个错误:
dnssd_clientstub write_all(17) DEFUNCT
dnssd_clientstub deliver_request ERROR:write_all(17,58bytes)failed
dnssd_clientstub write_all(17) DEFUNCT
在网上怎么都找不到解决办法,后来把这个协程去掉,就没有这个错误了。虽然和热点之间的通信依旧在建立连接的时候会卡很久(大概20--30s),但后面的通信是没有任何问题的。不过仍旧有个问题没有想明白,为什么我用同样的代码,让手机和电脑连接同一个可用(有网络的)热点,手机和电脑之间的通信初始化一点问题也没有,一点也没有卡顿延迟。而和自己公司做的下位机热点通信就会卡顿如此久呢?