前段时间使用第三方框架CocoaAsyncSocket实现了局域网图片同步,最近在处理音频文件同步,前者是Android向iOS同步,后者是iOS向Andriod同步。
在接收tcp消息时,发现一个问题:只能接收一次消息,下一次的消息无法收到。
经过与安卓端同事联调,发现,安卓每回复一条tcp消息后,就把该tcp关闭掉。(奇怪的设计,生生的将tcp用成了udp)
于是在iOS端使用两个socket,一个用来接收,一个用来发送,发送前再次与安卓建立一个tcp连接。
这个方案后来进行了优化,发送和接收使用同一个socket,安卓端不再把tcp给主动断开,那么在这个种情况下,只需要Android与iOS使用一个socket进行读写,要注意的一点是,写完数据好要记得在代理防范来继续执行读socket的方法,不然依然会出现只能接收一次消息的情况。
//写的回调
- (void)socket:(GCDAsyncSocket*)sock didWriteDataWithTag:(long)tag
{
NSLog(@"写的回调,tag:%ld",tag);
// 继续监听
[sockreadDataWithTimeout:-1 tag:500];
}
目前还有一个端口占用的问题,如果频繁开启tcp Server,会出现端口被占用无法开启的问题。在网上也有找方法,但还在进一步研究中,有结果了,继续更新。如果有小伙伴处理过tcp端口被占用的情况,请不吝赐教哦~
网友评论