-(void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode{
NSLog(@"%u",eventCode);switch(eventCode) {caseNSStreamEventOpenCompleted:
NSLog(@"连接完成");break;caseNSStreamEventHasBytesAvailable:
{NSLog(@"有刻度字节");
uint8_t buffer[10];
NSMutableString*mstr = [NSMutableString string];int len;//= [inputStream read:buffer maxLength:sizeof(buffer)];
do{
len= [inputStream read:buffer maxLength:sizeof(buffer)];
NSString*s =[[NSString alloc] initWithBytes:buffer length:len encoding:NSUTF8StringEncoding];
[mstr appendString:s];
}while (len == sizeof(buffer));
NSLog(@"====%@====",mstr);
}break;caseNSStreamEventHasSpaceAvailable:
NSLog(@"可以写入数据");break;caseNSStreamEventErrorOccurred:
NSLog(@"发生错误");break;caseNSStreamEventEndEncountered:
NSLog(@"流结束");//做善后工作//关闭流的同时,将流从主运行循环中删除
[aStream close];
[aStream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];default:break;
}
}
调用connect方法后控制台就会打印出连接完成,可以写入数据,此时就可以写入数据了,下面是写入数据的代码
NSString *str = @"iam:kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk12345";
NSData*data =[str dataUsingEncoding:NSUTF8StringEncoding];
[outputStream write:data.bytes maxLength:data.length];
因为Socket传输的都是二进制流,所以当传输字符串时需要通过NSData转为二进制数据
此外要记得流关闭的时候要从主循环中移除
一般我们开发的时候不会用原生的socket,一般都是用第三方的框架,这样可以提高开发效率,减少开发过程中出现错误
如果使用的是TCP协议一般用AsyncUdpSocket如果使用的是UPD一般使用asyncUdpSockey
http://pan.baidu.com/s/1gdDuGIf
上面的地址中有我的demo和一个python写的服务脚本,,只需要在你的终端里面输入 python+空格+那个py文件就运行起来了.这个文件运行起来以后你的电脑就是一台服务器了,,连接服务器的代码里面host传127.0.0.1 port传12345就可以建立连接了