蓝懿ios 技术内容和心得 12.3
2015-12-03 22:29
453 查看
大量数据通过Socket传输:
1、客户端发送时对文件进行处理:
NSString *filePath = @"/Users/ivan/Documents/第二期/视频/day29/3打地鼠续.mp4";
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
//文件名和文件长度拼接到一个字符串中
NSString *headerString = [NSString stringWithFormat:@"%@&&%ld",[filePathlastPathComponent],fileData.length];
NSData *headerData = [headerString dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%ld",headerData.length);
//创建一个100个字节的data
NSMutableData *allData = [NSMutableDatadataWithLength:100];
//替换一部分
[allData replaceBytesInRange:NSMakeRange(0, headerData.length)withBytes:headerData.bytes];
//把文件数据追加到后面
[allData appendData:fileData];
// 往端口写数据
[self.clientSocketwriteData:allData withTimeout:-1tag:0];
//创建客户端socket
self.clientSocket = [[AsyncSocketalloc]initWithDelegate:self];
//建立链接
[self.clientSocketconnectToHost:self.hostTF.textonPort:8000error:nil];
2、服务器接收到数据时进行处理:
//已经读取到数据
-(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
//取出前100个字节的数据
NSData *headerData = [data subdataWithRange:NSMakeRange(0, 100)];
NSString *headerString = [[NSStringalloc]initWithData:headerDataencoding:NSUTF8StringEncoding];
//判断是不是头数据
if (headerString&&[headerString componentsSeparatedByString:@"&&"].count==2) {//是头数据
NSArray *headers = [headerString componentsSeparatedByString:@"&&"];
self.fileName = headers[0];
self.length = [headers[1] longLongValue];
//抛去头剩下的文件数据得到
NSData *subFileData = [data subdataWithRange:NSMakeRange(100, data.length-100)];
//每次接收到头的话都初始化data避免多个文件data在同一个data中
self.allData = [NSMutableData data];
[self.allData appendData:subFileData];
}else{//不包含头的数据
[self.allData appendData:data];
}
//判断文件是否传输完成
if (self.allData.length==self.length) {
//把传过来的数据储存
NSString *newPath = [@"/Users/ivan/Desktop/a"stringByAppendingPathComponent:self.fileName];
//加载到内存中也是二进制数据
[self.allData writeToFile:newPath atomically:YES];
}
//把传输过来的二进制数据转成字符串
NSLog(@"%ld",data.length);
//调用读取数据的方法 防止一个文件一次没传完
[self.myNewSocketreadDataWithTimeout:-1tag:0];
学习ios 重要还是要理清楚思路 在做或者看老师代码的时候 自己多想想为什么 不要自己看着就抄 另外还是要推荐一下 蓝懿IOS这个培训机构 和刘国斌老师刘国斌老师还是很有名气的,听朋友说刘老师成立了蓝懿iOS,,老师讲课方式很独特,能够尽量让每个人都能弄明白,有的比较难懂的地方,如果有的地方还是不懂得话,老师会换个其它方法再讲解,这对于我们这些学习iOS的同学是非常好的,多种方式的讲解会理解得更全面,这个必须得给个赞,嘻嘻,还有就是这里的学习环境很好,很安静,可以很安心的学习,安静的环境是学习的基础,小班讲课,每个班20几个学生,学习氛围非常好,每天都学到9点多才离开教室,练习的时间很充裕,而且如果在练习的过程中有什么困难,随时可以向老师求助,不像其它机构,通过视频教学,有的甚至学完之后都看不到讲师本人,问点问题都不方便,这就是蓝懿与其它机构的区别,相信在刘国斌老师的细心指导下,每个蓝懿学员都能找到满意的工作,加油!
写博客第五十四天;
QQ:565803433
1、客户端发送时对文件进行处理:
NSString *filePath = @"/Users/ivan/Documents/第二期/视频/day29/3打地鼠续.mp4";
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
//文件名和文件长度拼接到一个字符串中
NSString *headerString = [NSString stringWithFormat:@"%@&&%ld",[filePathlastPathComponent],fileData.length];
NSData *headerData = [headerString dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%ld",headerData.length);
//创建一个100个字节的data
NSMutableData *allData = [NSMutableDatadataWithLength:100];
//替换一部分
[allData replaceBytesInRange:NSMakeRange(0, headerData.length)withBytes:headerData.bytes];
//把文件数据追加到后面
[allData appendData:fileData];
// 往端口写数据
[self.clientSocketwriteData:allData withTimeout:-1tag:0];
//创建客户端socket
self.clientSocket = [[AsyncSocketalloc]initWithDelegate:self];
//建立链接
[self.clientSocketconnectToHost:self.hostTF.textonPort:8000error:nil];
2、服务器接收到数据时进行处理:
//已经读取到数据
-(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
//取出前100个字节的数据
NSData *headerData = [data subdataWithRange:NSMakeRange(0, 100)];
NSString *headerString = [[NSStringalloc]initWithData:headerDataencoding:NSUTF8StringEncoding];
//判断是不是头数据
if (headerString&&[headerString componentsSeparatedByString:@"&&"].count==2) {//是头数据
NSArray *headers = [headerString componentsSeparatedByString:@"&&"];
self.fileName = headers[0];
self.length = [headers[1] longLongValue];
//抛去头剩下的文件数据得到
NSData *subFileData = [data subdataWithRange:NSMakeRange(100, data.length-100)];
//每次接收到头的话都初始化data避免多个文件data在同一个data中
self.allData = [NSMutableData data];
[self.allData appendData:subFileData];
}else{//不包含头的数据
[self.allData appendData:data];
}
//判断文件是否传输完成
if (self.allData.length==self.length) {
//把传过来的数据储存
NSString *newPath = [@"/Users/ivan/Desktop/a"stringByAppendingPathComponent:self.fileName];
//加载到内存中也是二进制数据
[self.allData writeToFile:newPath atomically:YES];
}
//把传输过来的二进制数据转成字符串
NSLog(@"%ld",data.length);
//调用读取数据的方法 防止一个文件一次没传完
[self.myNewSocketreadDataWithTimeout:-1tag:0];
学习ios 重要还是要理清楚思路 在做或者看老师代码的时候 自己多想想为什么 不要自己看着就抄 另外还是要推荐一下 蓝懿IOS这个培训机构 和刘国斌老师刘国斌老师还是很有名气的,听朋友说刘老师成立了蓝懿iOS,,老师讲课方式很独特,能够尽量让每个人都能弄明白,有的比较难懂的地方,如果有的地方还是不懂得话,老师会换个其它方法再讲解,这对于我们这些学习iOS的同学是非常好的,多种方式的讲解会理解得更全面,这个必须得给个赞,嘻嘻,还有就是这里的学习环境很好,很安静,可以很安心的学习,安静的环境是学习的基础,小班讲课,每个班20几个学生,学习氛围非常好,每天都学到9点多才离开教室,练习的时间很充裕,而且如果在练习的过程中有什么困难,随时可以向老师求助,不像其它机构,通过视频教学,有的甚至学完之后都看不到讲师本人,问点问题都不方便,这就是蓝懿与其它机构的区别,相信在刘国斌老师的细心指导下,每个蓝懿学员都能找到满意的工作,加油!
写博客第五十四天;
QQ:565803433
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 如何组织构建多文件 C 语言程序(二)
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 如何写好 C main 函数
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- test
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 网络路由技术及运用2
- 路由器的关键技术
- IP网络路由技术
- 远程控制技术的应用
- 智能防火墙的技术特征
- 什么是多层交换技术
- 浅析多层交换技术
- 路由器技术的变革
- 网络路由技术及运用3
- CSS中的滑动门技术