AsyncSocke使用
来源:互联网 发布:下载软件评测 编辑:程序博客网 时间:2024/06/06 14:29
1.下载ASyncSocket库源码
2.把ASyncSocket库源码加入项目:只需要增加RunLoop目录中的AsyncSocket.h、AsyncSocket.m、AsyncUdpSocket.h和AsyncUdpSocket.m四个文件。
3.在项目增加CFNetwork框架
2.链接成功后掉用的回调方法
3.接收到服务器下发数据时调用的回调方法
这时如果有客户端与之建立连接,比如通过telnet。会依次调用AsyncSocket 的delegate的如下方法:
onSocket:didAcceptNewSocket: AsyncSocket创建了新的Socket用于处理和客户端的请求,如果这个新socket实例你不打算保留(retain),那么将拒绝和该客户端连接
onSocket:wantsRunLoopForNewSocket:,提供线程的runloop实例给AsyncSocket,后者将使用这个runloop执行socket通讯的操作
onSocketWillConnect:,将要建立连接,这时可以做一些准备工作,如果需要的话
onSocket:didConnectToHost:port:,这个方法是建立连接后执行的,一般会在这里调用写入或者读取socket的操作
在Echo示例中,不打算执行多线程,也不想支持多客户端连接,而且服务器端和客户端将建立长连接。直至客户端断开连接,服务器端才释放相应的socket。
2.把ASyncSocket库源码加入项目:只需要增加RunLoop目录中的AsyncSocket.h、AsyncSocket.m、AsyncUdpSocket.h和AsyncUdpSocket.m四个文件。
3.在项目增加CFNetwork框架
在Framework目录右健,选择Add-->Existing Files... , 选择 CFNetwork.framework
1.链接到主机
#pragma mark 连接到服务器- (BOOL)connectToServer{ if (socket == nil) { socket = [[AsyncSocket alloc] initWithDelegate:self]; NSError *error = nil; if (![socket connectToHost:PHHost onPort:PHPort error:&error]) { return NO; } else { NSData *data = [[NSData alloc] init]; [socket writeData:data withTimeout:10.0f tag:0];//发送数据到服务器 return YES; } } else { [socket readDataWithTimeout:-1 tag:0]; return YES; }}
2.链接成功后掉用的回调方法
#pragma mark socket链接到主机- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{ [sock readDataWithTimeout:-1 tag:0];}
3.接收到服务器下发数据时调用的回调方法
#pragma mark socket接受到数据处理方法- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{ NSLog(@"did read data"); NSString* message = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"message is: \n%@",message); if (tag == 2) { [socket disconnect]; }}
这时如果有客户端与之建立连接,比如通过telnet。会依次调用AsyncSocket 的delegate的如下方法:
onSocket:didAcceptNewSocket: AsyncSocket创建了新的Socket用于处理和客户端的请求,如果这个新socket实例你不打算保留(retain),那么将拒绝和该客户端连接
onSocket:wantsRunLoopForNewSocket:,提供线程的runloop实例给AsyncSocket,后者将使用这个runloop执行socket通讯的操作
onSocketWillConnect:,将要建立连接,这时可以做一些准备工作,如果需要的话
onSocket:didConnectToHost:port:,这个方法是建立连接后执行的,一般会在这里调用写入或者读取socket的操作
在Echo示例中,不打算执行多线程,也不想支持多客户端连接,而且服务器端和客户端将建立长连接。直至客户端断开连接,服务器端才释放相应的socket。
代码如下:- (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket{ if (!acceptSocket) { acceptSocket=[newSocket retain]; NSLog(@"did accept new socket"); }}- (NSRunLoop *)onSocket:(AsyncSocket *)sock wantsRunLoopForNewSocket:(AsyncSocket *)newSocket{ NSLog(@"wants runloop for new socket."); return [NSRunLoop currentRunLoop];}- (BOOL)onSocketWillConnect:(AsyncSocket *)sock{ NSLog(@"will connect"); return YES;}- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{ NSLog(@"did connect to host"); [acceptSocket readDataWithTimeout:-1 tag:1];}- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{ NSLog(@"did read data"); NSString* message = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; NSLog(@"message is: n%@",message); [acceptSocket writeData:data withTimeout:2 tag:1];}- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag{ NSLog(@"message did write"); [acceptSocket readDataWithTimeout:-1 tag:1];}- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err{ NSLog(@"onSocket:%p willDisconnectWithError:%@", sock, err);}- (void)onSocketDidDisconnect:(AsyncSocket *)sock{ NSLog(@"socket did disconnect"); [acceptSocket release]; acceptSocket=nil;}这里timeout设置为-1,这样就可以保持长连接状态。
- AsyncSocke使用
- 使用
- 使用
- 使用
- 使用
- 使用
- 使用
- 使用++,--
- 使用$@ $!
- 使用
- SoftICE使用(指令使用)
- 使用GraphEdit使用
- 使用HtmlParser使用心得
- 时钟使用使用
- Ubuntu 使用Git 使用
- Ubuntu 使用Git 使用
- GUID使用的使用
- Git使用 tortoisegit使用
- 科里定律:坚守一个目标
- LeetCode Swap Nodes in Pairs交换链表中的两个节点
- CI对整个页面输出内容处理(去掉整个页面空格,注释什么的)
- 最全的男性职场着装常识
- 搞移动互联网站的三板斧
- AsyncSocke使用
- HDU 2039 - 三角形
- 线程控制基本方法
- 网络传输协议概述——第二讲:TCP/IP协议概述
- 计算机网络之物理层笔记
- 基本语言细节--《The C++ Programming Language 》--(1)开辟鸿蒙
- Linux input子系统分析 概述与数据结构
- 网络传输协议概述——第三讲:TCP/IP协议分层
- 【异常】android.app.Application cannot be cast to****