XMPP-最简单的本地模型
2015-09-15 17:00
330 查看
#import "ViewController.h" @interface ViewController () <NSStreamDelegate> { NSInputStream *inputStream; NSOutputStream *outputStream; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; } #pragma mark - NSStreamDelegate /** * * * @param aStream * @param eventCode NSStreamEventOpenCompleted = 1UL << 0, //输入输出流打开完成 NSStreamEventHasBytesAvailable = 1UL << 1, //有字节可读 NSStreamEventHasSpaceAvailable = 1UL << 2, //可以发送字节 NSStreamEventErrorOccurred = 1UL << 3, //连接出现错误 NSStreamEventEndEncountered = 1UL << 4 //连接结束 */ - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { NSLog(@"%@", aStream ); switch ( eventCode ) { case NSStreamEventOpenCompleted: NSLog(@"输入输出流打开完成"); break; case NSStreamEventHasBytesAvailable: NSLog(@"有字节可读"); [self readData]; //服务器返回数据 break; case NSStreamEventHasSpaceAvailable: NSLog(@"可以发送字节"); break; case NSStreamEventErrorOccurred: NSLog(@"连接出现错误"); break; case NSStreamEventEndEncountered: NSLog(@"连接结束"); break; default: break; } } /** * 读取字节数据 */ - (void)readData { //建立一个缓冲区 可以放1024个字节,这里只做理解,实际返回数据可能远不止1024 uint8_t buf[2014]; //length是返回直接可以装的字节数 NSInteger length = [inputStream read:buf maxLength:sizeof(buf)]; //把字节转换成字符串 NSData *data = [NSData dataWithBytes:buf length:length]; //从服务器接收到的数据 NSString *readStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@", readStr ); } #pragma mark - 连接服务器 /** * 连接服务器 */ - (IBAction)connectionServer:(id)sender { //一、建立连接 NSString *host = @"127.0.0.1"; int port = 12345; CFReadStreamRef readStream; CFWriteStreamRef writeStream; CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)host, port, &readStream, &writeStream); //C语言建立与服务器的连接 //1-1、将C语言的输入输出流转换成OC对象 inputStream = (__bridge NSInputStream *)(readStream); outputStream = (__bridge NSOutputStream *)(writeStream); //1-2、设置代理 inputStream.delegate = self; outputStream.delegate = self; //1-3、将输入输出流添加到主运行循环 [inputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; [outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; //1-4、打开输入输出流 [inputStream open]; [outputStream open]; } #pragma mark - 发送数据 /** * 模拟发送数据 */ - (IBAction)clickWithSendMessage:(id)sender { //二、收发数据 //收发数据模拟“用户登录”场景 NSString *loginStr = @"iam:zhangsan"; //特定字符,服务器模拟对象:zhangsan NSData *data = [loginStr dataUsingEncoding:NSUTF8StringEncoding]; [outputStream write:data.bytes maxLength:data.length]; //write一个流去服务器 write:这里是字节数组 maxLength:长度 } @end
相关文章推荐
- 爬虫学习2
- 为什么淘宝、腾讯需要大量顶尖高手来开发网站?
- 如何看懂Code128条形码
- Android(java)学习笔记255:JNI之JNI概念
- hdu5422 最大表示法+KMP
- js+flash实现,单击按钮复制文本框内容
- Can't connect to local MYSQL server through socket /var/lib/mysql/mysql.sock
- Codevs 1014 装箱问题
- android仿ios时间控件
- mvc:annotation-driven与context:annotation-config -- AnnotationDrivenBeanDefinitionParser
- 欢迎使用CSDN-markdown编辑器
- linux下查看已经安装的jdk 并卸载jdk
- iOS开发之 滚动视图 + 页面控件(UIScrollView + UIPageControl)
- 学习Linux第二天
- 运维工程师的职责和前景
- SQL SERVER 截取字符串常用函数
- java+android须知环境变量配置
- Android 多分辨率自适应总结
- iphone程序中实现截屏的一种方法
- 一个很详细的web.xml讲解