1、连接服务器
2、监听状态
3、发送
4、当Stream 的状态为NSStreamEventHasBytesAvailable 时 接收消息
注意:
我是使用 chatsetver.py来测试的
#所以端口号是12345 而且消息的指令是msg 登录指令是iam
连接服务器
// 1.连接服务器
/*
1.端口号
2.主机
3.输入输出流(用的是C语言的输入输出流)
4.连接 CFStreamCreatePairWithSocketToHost(...)
5.将输入输出流转成OC
6.设置代理
7.放入运行循环
8.打开输入输出流
*/
// 2.监听状态
// 3.登录
/*
NSString 转成 NSData 类型
在通过 NSOutputStream 的类方法 write(data.bytes,data.length)
*/
// 4.发送消息
/*
NSString 转成 NSData 类型
在通过 NSOutputStream 的类方法 write(data.bytes,data.length)
*/
// 5.接收消息
/*
建立一个缓冲区 uint8_t buf[1024];
返回实际装的字节数
把字节数组转换成NSData
将data转化成字符串
*/
代码
#连接
-(void)connect{
//主机
NSString *host = @"127.0.0.1";
//端口号
int port = 12345;
//输入输出流(用的是C语言的输入输出流)
CFReadStreamRef read;
CFWriteStreamRef write;
//连接
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)(host), port, &read, &write);
//将输入输出流转成OC
inputStream = (__bridge NSInputStream *)(read);
outputStream = (__bridge NSOutputStream *)(write);
//设置代理
inputStream.delegate = self;
outputStream.delegate = self;
//放入运行循环
[inputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
//打开输入输出流
[inputStream open];
[outputStream open];
}
#代理方法 - 状态监听
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode{
switch (eventCode) {
case NSStreamEventOpenCompleted:
NSLog(@"输入输出流打开完成");
break;
case NSStreamEventHasBytesAvailable:
NSLog(@"有字节可读");
[self recevisMessage];
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)login{
// 在服务器chatserver.py中 以iam为登录指令, mag 是消息指令 通过 iam 指令 进行登录
NSString *login = @"iam:Cancer";
NSData *data = [login dataUsingEncoding:NSUTF8StringEncoding];
[outputStream write:data.bytes maxLength:data.length];
}
#发送消息
-(void)sendMessage{
NSString *msg = @"msg:hello!";
NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
[outputStream write:data.bytes maxLength:data.length];
}
#接收消息
-(void)recevisMessage{
// 建立一个缓冲区 uint8_t buf[1024];
uint8_t buf[1024];
// 返回实际装的字节数
NSInteger len = [inputStream read:buf maxLength:sizeof(buf)];
// 把字节数组转换成NSData
NSData *data = [NSData dataWithBytes:buf length:len];
// 将data转化成字符串
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
}
网友评论