先发地址:github-asyncSocket
项目要用socket,就找了个第三方,自己写真心累。
上面下载下来的demo都很好,基本一下就能看懂。
这边用到的是tcp,平常也用gcd就用那一块的。
再开上echo server就能做简单的收发了
因为这边项目发的是定制的协议,都是二进制,然后这个框架读socket是按行截的样子,每条消息末尾要加 \r\n , byte 就是 0d0a了。
还有就是要双方都能实时通信的问题,就是两边随时都能接收,而不是通常上的客户端只是发送后等待接收。
再加上要处理超时断开问题,确实麻烦。
研究了一下m文件
这个是读取结束时的操作
if (readTimer)
{
dispatch_source_cancel(readTimer);
readTimer = NULL;
}
currentRead = nil;
这个是获取currentRead的操作
// If we're not currently processing a read AND we have an available read stream
if ((currentRead == nil) && (flags & kConnected))
{
if ([readQueue count] > 0)
{
// Dequeue the next object in the write queue
currentRead = [readQueue objectAtIndex:0];
[readQueue removeObjectAtIndex:0];
所以把逻辑做成这样:服务端不动,客户端在每发送一个需要响应的消息时就增加一个read,在每读取一条消息后,关闭当前read,开一个新的read用于实时接收(这里在开始时就是增加一个read,也就是在发送需要响应的消息以外情况下只能存在一个read)。
然后双方的timeout都自由设定,直接复制echoServer项目上的就行了