IOS Socket 03-建立连接与登录
2016-05-05 15:06
666 查看
1. 搭建python服务器
这里我们用到python服务器Socket Server。如何运行Server?下面介绍
1)通过百度云下载文件 http://pan.baidu.com/s/1i5ybxg5
下载完成文件之后,可以看到倒数第三行的代码,reactor.listenTCP(12345, factory)。 这里可以修改端口号12345。
2)然后我们运行文件。
首先,在mac机器上打开终端,在终端上到chatserver.py的文件目录下。然后输入命令:python chatserver.py,按回车。
可以看到,有‘Iphone Chat server started’的字样。证明服务器已经开启。
2. 客户端 - 与服务器建立连接与登录
1)首先建立连接(通过3次握手)
定义全局变量:
与服务器建立连接:
// 1.与服务器通过三次握手建立连接
// 把输入输入流添加到主运行循环(RunLoop)
2)然后实现delegate
首先实现NSStreamDelegate,然后实现delegate必须的方法:(代理的回调函数-下面方法,是在主线程中完成的)
[_inputStream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[_outputSteam removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
读取服务器返回的数据:
3)上诉实现与服务器连接后,我们发送数据给服务器实现登录
查看本文章之前,可以看看
IOS Socket 02-Socket基础知识
也可以看下一篇文章
IOS Socket 04-利用框架CocoaAsyncSocket实现客户端/服务器端
这里我们用到python服务器Socket Server。如何运行Server?下面介绍
1)通过百度云下载文件 http://pan.baidu.com/s/1i5ybxg5
下载完成文件之后,可以看到倒数第三行的代码,reactor.listenTCP(12345, factory)。 这里可以修改端口号12345。
2)然后我们运行文件。
首先,在mac机器上打开终端,在终端上到chatserver.py的文件目录下。然后输入命令:python chatserver.py,按回车。
可以看到,有‘Iphone Chat server started’的字样。证明服务器已经开启。
2. 客户端 - 与服务器建立连接与登录
1)首先建立连接(通过3次握手)
定义全局变量:
NSInputStream *_inputStream; NSOutputStream *_outputSteam;
与服务器建立连接:
/**IOS实现sokcet连接是通过使用C语言**/
// 1.与服务器通过三次握手建立连接
,设置主机(本机)和端口号 NSString *host = @"127.0.0.1"; int port = 12345; // 2.定义输入输出流 CFReadStreamRef readStream; CFWriteStreamRef writeStream; // 3.分配输入输出流的内存空间 CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)host, port, &readStream, &writeStream); // 4.把C语言的输入输出流转成OC对象 _inputStream = (__bridge NSInputStream *)readStream; _outputSteam = (__bridge NSOutputStream *)(writeStream); // 5.设置代理,监听数据接收的状态 _outputSteam.delegate = self; _inputStream.delegate = self;
// 把输入输入流添加到主运行循环(RunLoop)
主运行循环是监听网络状态 [_outputSteam scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; [_inputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; // 6.打开输入输出流 [_inputStream open]; [_outputSteam open];
2)然后实现delegate
首先实现NSStreamDelegate,然后实现delegate必须的方法:(代理的回调函数-下面方法,是在主线程中完成的)
-(void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode{ switch (eventCode) { case NSStreamEventOpenCompleted: NSLog(@"aStream: %@",aStream); NSLog(@"成功连接建立,形成输入输出流的传输通道"); break; case NSStreamEventHasBytesAvailable: NSLog(@"有数据可读"); //读取数据 [self readData]; break; case NSStreamEventHasSpaceAvailable: NSLog(@"可以发送数据"); break; case NSStreamEventErrorOccurred: NSLog(@"有错误发生,连接失败"); break; case NSStreamEventEndEncountered: NSLog(@"正常的断开连接"); [_inputStream close];
[_outputSteam close];
[_inputStream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[_outputSteam removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
break; default: break; } }
读取服务器返回的数据:
#pragma mark 读取服务器返回的数据 -(void)readData{ //定义缓冲区 这个缓冲区只能存储1024字节
uint8_t buf[1024]; //读取数据 len为服务器读取到的实际字节数
NSInteger len = [_inputStream read:buf maxLength:sizeof(buf)]; // 把缓冲区里的实现字节数转成字符串 NSString *receiverStr = [[NSString alloc] initWithBytes:buf length:len encoding:NSUTF8StringEncoding]; NSLog(@"%@",receiverStr); }
3)上诉实现与服务器连接后,我们发送数据给服务器实现登录
- (void) loginServer { //发送登录请求 使用输出流。 拼接登录的指令 iam:zhangsan NSString *loginStr = @"iam:zhangsan";
//uint8_t * 字符数组 NSData *data = [loginStr dataUsingEncoding:NSUTF8StringEncoding]; [_outputSteam write:data.bytes maxLength:data.length]; }
查看本文章之前,可以看看
IOS Socket 02-Socket基础知识
也可以看下一篇文章
IOS Socket 04-利用框架CocoaAsyncSocket实现客户端/服务器端
相关文章推荐
- 播放音效 播放音乐
- iOS 对象转换成字典
- 苹果开发者账号申请时报错提示错误:Legal Entity Name
- iOS画中画Picture in Picture:你需要知道的9个知识点
- iOS 登录注册只包含数字/手机号验证
- iOS中的加密操作
- iOS 加急审核流程以及从审核中移除构建版本
- iOS 视图高斯模糊(毛玻璃)效果实现
- iOS开发------手动约束布局出现NSAutoresizingMaskLayoutConstraint冲突(解决)
- iOS本地数据存取,看这里就够了
- iOS svn s工具Cornerstone无法上传.a文件
- iOS开发-图片高斯模糊效果
- iOS开发,用了ARC,引入非ARC的第三方,报错
- iOS之修改项目BUG之旅--(二)
- 对iOS锁的一些研究
- iOS开发Xcode使用github托管代码
- iOS性能忧化
- 在BIOS模式下USB的启动热键是什么?(BIOS设置图解教程)
- iOS Crash Log 分析(三)
- iOS 等待条件满足再向下执行但不主卡线程NSRunLoop