iphone socket编程之AsyncSocket使用说明

初次接触socket编程,还记得大学的时候对socket编程不屑一顾,同学做了个模拟qq的程序也不感兴趣。现在做移动开发,才发现socket或者http编程是多么的重要。如果你的程序要读取网络数据无非就是通过http或者socket。小型低效率程序可能可以通过http实现,http就是get/post也比较简单,大型程序或者要求效率的非socket莫属了。

现在在做iphone程序开发,于是研究了一下iphone下面的socket编程,谷歌百度一番之后发现某人贡献的开源socket框架AsyncSocket功能相当的强大,使用相当的简单。

首先到https://github.com/robbiehanson/CocoaAsyncSocket下载它,然后导入RunLoop目录里面的AsyncSocket.h和AsyncSocket.m文件,如果需要udp就把AsyncUdpSocket.h和AsyncUdpSocket.m也一起导入到项目里面去,最后添加framework:CFNetwork.framework,在程序中导入#import "AsyncSocket.h",准备工作就做完了。

asyncSocket=[[AsyncSocket alloc]initWithDelegate:self];
    [asyncSocket setRunLoopModes:[NSArray arrayWithObject:NSRunLoopCommonModes]];

后面那一句不能掉,原因不清楚,貌似是神马RunLoop相关的,我现在也不懂,以后懂了再来补充⋯⋯。

- (BOOL)acceptOnPort:(UInt16)port error:(NSError **)errPtr

//开启监听

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{
    [sock readDataWithTimeout:-1 tag:0];
}

//连接成功,打开监听数据读取,如果不监听那么无法读取数据

- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
//    NSData *strData = [data subdataWithRange:NSMakeRange(0, [data length] - 2)];
    NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(msg);
//    [sock readDataToData:[AsyncSocket CRLFData] withTimeout:-1 tag:0];
    [sock readDataWithTimeout:-1 tag:0];
}

//读取数据了,继续监听读取,注释的第2行可以替代最后一行,但是输出的数据最后也要追加"\r\n",这个iphone里面不用考虑。

主要就是这些。如果客户端断开了,服务器会主动调用委托事件。但是客户端不会主动调用,不知为何。

同样这篇文章也只提到了最关键的一些地方。具体怎么用AsyncSocket还得自己去体会。

你可能感兴趣的:(编程,socket,移动开发,iPhone,encoding,程序开发)