xuqiang918的专栏

iPhone的标准推荐是CFNetwork 库编程,其封装好的开源库是 cocoa AsyncSocket库,用它来简化CFNetwork的调用,它提供了异步操作 主要特性有: -(void)onSocketDidDisconnect:(ASyncSocket *)sock; 当socket由于或没有错误而断开连接,如果你想要在断开连接后release socket,在此方法工作,而在onSocket:willDisconnectWithError 释放则不安全-(void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket; 当产生一个socket去处理连接时调用,此方法会返回 线程上的run-loop 的新的socket和其应处理的委托,如果省略,则使用[NSRunLoop cunrrentRunLoop] -(BOOL)onSocketWillConnect:(AsyncSocket *)sock; -(void)onSocket:(AsyncSocket *)sock didConnectToHost :(NSString *)host port:(UINt16)port; 当socket连接正准备读和写的时候调用,host属性是一个IP地址,而不是一个DNS 名称 -(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long) tag; 当socket已完成所要求的数据读入内存时调用,如果有错误则不调用 -(void)onSocket:(Asyncsocket *)sock didReadPartialDataOfLength:(NSUInteger)partiaLength tag:(long)tag; 当一个socket读取数据,但尚未完成读操作的时候调用,如果使用 readToData: or readToLength: 方法 会发生,可以被用来更新进度条等东西 -(void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag; 当一个socket已完成请求数据的写入时候调用 -(void)onSocket:(AsyncSocket *)sock didWritePartialDataOfLength:(NSUInteger)partialLength tag:(long)tag; 当一个socket写入一些数据,但还没有完成整个写入时调用,它可以用来更新进度条等东西 -(NSTimeInterval)onSocket:(AsyncSocket *)sock shouldTimeoutReadWithTag:(long)tag elapsed:(NSTimeInterval)exapsed bytesDone:(NSUInteger)length 使用读操作已超时但还没完成时调用,此方法允许随意延迟超时,如果返回一个正的时间间隔,读取的超时将有一定量的扩展,如果不实现这个方法,或会像往常一样返回一个负的时间间隔,elapsed参数是 原超时的总和,加上先前通过这种方法添加的任何补充, length参数是 读操作到目前为止已读取的字节数, 注意,如果返回正数的话,这个方法可能被一个单独的读取多次调用 -(NSTimeInterval)onSocket:(AsyncSocket *)sock shouldTimeoutWriteWithTag:(long)tag elapsed:(NSTimeInterval)elapsed bytesDone:(NSUInteger)length; 如果一个写操作已达到其超时但还没完成时调用,同上 -(BOOL)canSafelySetDelegate 用来查看在改变它之前,是否带有与当前的委托有悬而未决的业务(读/写)。当然,应在安全连接或接受委托之前改变委托 -(BOOL)acceptOnPort:(UInit16)port error:(NSError **)errPtr; 告诉socket开始听取和接受制定端口上的连接,当一个连接到来的时候,AsyncSocket实例将调用各种委托方法,socket将听取所有可用的接口(wifi,以太网等) -(BOOL)connectToHost:(NSString *)hostname onPort:(UInt16)port error :(NSError **)errPtr; 连接给定的主机和端口,主机hostname可以是域名或者是Ip地址 -(void)disconnectAfterReading; 在已经完成了所有悬而未决的读取时 断开,在调用之后,读取和写入方法将无用,socket将断开 即使仍有待写入 -(void)readDataWithTimeout:(NSTimeInterval)tiemout tag:(long)tag; 读取socket上第一次成为可用的字节,如果timeout值是负数的,读操作将不使用timeout -(void)readDataToLength:(NSUInterger)length withTimeout:(NSTimeInterval)timeout tag:(long)tag; 读取给定的字节数,如果length为0,方法将无用,委托将不会被调用 -(void)readDataToLength:(NSUInteger)length withTimeout:(NSTimeInterval)tiemout buffer:(NSMutableData *)buffer bufferOffset:(NSUInteger) offset tag:(long)tag; 读取给定的字节数,在给定的偏移开始,字节将被追加到给定的字节缓冲区 -(void)writeData:(NSData *)data withTimeout:(NSTimeInterval) timeout tag:(long)tag; 将data写入socket,当完成的时候委托被调用 -(NSArray *)runLoopModes 返回当前正在运行的循环模式的AsyncSocket实例, run loop modes的默认设置是NSDefaultRunLoopMode -(NSData *)unreadData; 一个错误的事件,在 onSocket:willDisconnectWithError: 将会被调用 去读取留在socket上的任何数据 + (NSData *)CRLFData; // 0x0D0A -(void)onSocketDidDisconnect:(ASyncSocket *)sock; 当socket由于或没有错误而断开连接,,如果你想要在断开连接后release socket,在此方法工作,而在onSocket:willDisconnectWithError 释放则不安全-(void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket; 当产生一个socket去处理连接时调用,此方法会返回 线程上的run-loop 的新的socket和其应处理的委托,如果省略,则使用[NSRunLoop cunrrentRunLoop] -(BOOL)onSocketWillConnect:(AsyncSocket *)sock; -(void)onSocket:(AsyncSocket *)sock didConnectToHost :(NSString *)host port:(UINt16)port; 当socket连接正准备读和写的时候调用,host属性是一个IP地址,而不是一个DNS 名称 -(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long) tag; 当socket已完成所要求的数据读入内存时调用,如果有错误则不调用 -(void)onSocket:(Asyncsocket *)sock didReadPartialDataOfLength:(NSUInteger)partiaLength tag:(long)tag; 当一个socket读取数据,但尚未完成读操作的时候调用,如果使用 readToData: or readToLength: 方法 会发生,可以被用来更新进度条等东西 -(void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag; 当一个socket已完成请求数据的写入时候调用 -(void)onSocket:(AsyncSocket *)sock didWritePartialDataOfLength:(NSUInteger)partialLength tag:(long)tag; 当一个socket写入一些数据,但还没有完成整个写入时调用,它可以用来更新进度条等东西 -(NSTimeInterval)onSocket:(AsyncSocket *)sock shouldTimeoutReadWithTag:(long)tag elapsed:(NSTimeInterval)exapsed bytesDone:(NSUInteger)length 使用读操作已超时但还没完成时调用,此方法允许随意延迟超时,如果返回一个正的时间间隔,读取的超时将有一定量的扩展,如果不实现这个方法,或会像往常一样返回一个负的时间间隔,elapsed参数是 原超时的总和,加上先前通过这种方法添加的任何补充, length参数是 读操作到目前为止已读取的字节数, 注意,如果返回正数的话,这个方法可能被一个单独的读取多次调用 -(NSTimeInterval)onSocket:(AsyncSocket *)sock shouldTimeoutWriteWithTag:(long)tag elapsed:(NSTimeInterval)elapsed bytesDone:(NSUInteger)length; 如果一个写操作已达到其超时但还没完成时调用,同上 -(BOOL)canSafelySetDelegate 用来查看在改变它之前,是否带有与当前的委托有悬而未决的业务(读/写)。当然,应在安全连接或接受委托之前改变委托 -(BOOL)acceptOnPort:(UInit16)port error:(NSError **)errPtr; 告诉socket开始听取和接受制定端口上的连接,当一个连接到来的时候,AsyncSocket实例将调用各种委托方法,socket将听取所有可用的接口(wifi,以太网等) -(BOOL)connectToHost:(NSString *)hostname onPort:(UInt16)port error :(NSError **)errPtr; 连接给定的主机和端口,主机hostname可以是域名或者是Ip地址 -(void)disconnectAfterReading; 在已经完成了所有悬而未决的读取时 断开,在调用之后,读取和写入方法将无用,socket将断开 即使仍有待写入 -(void)readDataWithTimeout:(NSTimeInterval)tiemout tag:(long)tag; 读取socket上第一次成为可用的字节,如果timeout值是负数的,读操作将不使用timeout -(void)readDataToLength:(NSUInterger)length withTimeout:(NSTimeInterval)timeout tag:(long)tag; 读取给定的字节数,如果length为0,方法将无用,委托将不会被调用 -(void)readDataToLength:(NSUInteger)length withTimeout:(NSTimeInterval)tiemout buffer:(NSMutableData *)buffer bufferOffset:(NSUInteger) offset tag:(long)tag; 读取给定的字节数,在给定的偏移开始,字节将被追加到给定的字节缓冲区 -(void)writeData:(NSData *)data withTimeout:(NSTimeInterval) timeout tag:(long)tag; 将data写入socket,当完成的时候委托被调用

然后继续努力,把让自己跌倒的石头搬掉或绕过去,不就解决问题了吗?

xuqiang918的专栏

相关文章:

你感兴趣的文章:

标签云: