SOCKET访问基本模型
来源:互联网 发布:手机淘宝加入购物车 编辑:程序博客网 时间:2024/05/21 11:00
#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(@"连接结束"); //关闭输入输出流 [inputStream close]; [outputStream close]; //从主运行循环中移除 [inputStream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; [outputStream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; 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
0 0
- SOCKET访问基本模型
- Windows Socket阻塞模式基本模型
- SOCKET模型
- Socket 模型
- socket模型
- socket模型
- socket模型
- Socket模型
- socket模型
- Android基于Socket无线遥控(1)--Socket基本模型搭建
- Android基于Socket无线遥控(1)--Socket基本模型搭建
- Android基于Socket无线遥控(1)--Socket基本模型搭建
- 基本模型
- Socket初学认识 ----- Socket模型
- socket编程--TCP客户/服务器模型 (c/s)及基本函数
- socket通信之二:实现一个基本的客户/服务器模型
- Socket模型之选择模型
- socket编程模型
- leetcode系列(31)Longest Substring Without Repeating Characters 最长不重复子串
- lucene4.4与IKAnalyzer的冲突
- 音乐播放器app开源代码
- Java的GC机制详解
- 《Cocos2d-x实战(卷Ⅰ):C++开发》目录 (仅供参考)
- SOCKET访问基本模型
- oracle触发器
- Tomcat+Servlet保存Cookie到浏览器
- Pay Your Debts
- 【J2ee】JSP request 内置函数的使用完全版
- Add Talents, Not Skills, to Your Team
- VIM学习笔记 拼写检查(Spell Check)
- <c:forEach varStatus="status">中 varStatus的属性简介
- 关于thinkphp的一些字母方法简介