CocoaAsyncSocket下载
CocoaAsyncSocket支持tcp和udp。其中:
*AsyncSocket类是支持TCP的
*AsyncUdpSocket是支持UDP的
1、导入文件GCDAsyncSocket
2、导入头部文件
3、端口号和主机ip
NSString *host = @"127.0.0.1";
int port = 12345;
4、创建一个socket对象
//将GCDAsynSocket设置为全局变量
GCDAsyncSocket *socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)];
delegate:一半看到代理我们都写self
delegateQueue:
全局队列(代理的方法是在子线程被调用)
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)
主队列(代理的方法会在主线程被调用)
dispatch_get_main_queue()
<b>如果代理里的动作 是 耗时的动作,就 不能 在主线程中调用,要 在子线程中</b>
<b>如果代理里的动作 不 是耗时的动作,就 能 在主线程中调用,不需要 在子线程中</b>
优先级 我们设置默认 开发者使用默认
5、连接
NSError *error = nil;
[socket connectToHost:host onPort:port error:&error];
这里可以输出error
6、如何知道连接成功失败
6.1、代理GCDAsyncSocketDelegate
6.2、实现代理方法
didConnectToHost 连接成功
didDisconnect 断开连接(如果error有值,连接失败,如果没值,正常断开)
connect、read、write、disconnect,GCDAsyncSocket
write:
[_socket writeData:[msg dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:101];
//withTimeout: 超时时间 -1 表示不超时
//tag: 一个标识
代理方法 didWriteDataWithTag 数据发送成功 手动读取(readDataWithTag) 才会调用read代理方法 (didReadData)
read:
1、实现代理方法 didReadData