iOS中UDP的使用
//
// ViewController.m
// UDPDemo
//
// Created by qianfeng01 on 15-8-13.
// Copyright (c) 2015年 zg. All rights reserved.
//
#import "ViewController.h"
#import "AsyncUdpSocket.h"
#import "ZCScreenShot.h"
#define STU 1
@interface ViewController ()<AsyncUdpSocketDelegate>
{
//建立socket
AsyncUdpSocket *sendSocket;
AsyncUdpSocket *serverSocket;
//教师端须要一个label,每隔1秒,改变一下数字
UILabel *numberLabel;
//学生端。须要一个imageView,显示教师端发送过来的数据
UIImageView *imageView;
//须要一个宏定义来区分学生端和教师端,一键转换
}
@property (nonatomic,strong) NSMutableArray *ipArray;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
/**
* 程序分为学生端和教师端。教师端负责对全部接入程序的学生发送截图图片,学生端接受数据的时候。在imageview上显示
学生端程序启动的时候,须要向教师端发送一个数据。也就是签到,这样教师端能够获得学生端的IP地址。进行数据转发
须要的是:截屏函数仅仅对普通的ui有效。可是无法获取到视频截屏,假设要进行视频截屏。须要使用opengl来获取GL的信息,再进行渲染
*/
self.ipArray = [NSMutableArray arrayWithCapacity:0];
[self createView];
[self createSocket];
if (STU) {
//假设是学生,程序启动向教师端发送一个数据
[sendSocket sendData:[@"签到!
" dataUsingEncoding:NSUTF8StringEncoding] toHost:@"10.8.155.36" port:5678 withTimeout:-1 tag:100];
}else{
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timerClick) userInfo:nil repeats:YES];
}
}
- (void)timerClick{
if (self.ipArray.count == 0) {
return;
}
//设置label的背景颜色
float r = arc4random()%256/255.0;
float g = arc4random()%256/255.0;
float b = arc4random()%256/255.0;
numberLabel.backgroundColor = [UIColor colorWithRed:r green:g blue:b alpha:1];
numberLabel.text = @"抽烟不?跟我一块儿吧";
numberLabel.font = [UIFont boldSystemFontOfSize:40];
//截取屏幕
//第一个參数是截取图片的范围,第二个參数是截取的那一层
UIImage *image = [ZCScreenShot beginImageContext:self.view.frame View:self.view];
//遍历转发
for (NSString *ip in self.ipArray) {
[sendSocket sendData:UIImageJPEGRepresentation(image, 0.1) toHost:ip port:5678 withTimeout:-1 tag:100];
}
}
- (void)createSocket{
//不论是学生端。还是教师端,都须要发送和接受,学生端发送一个签到给教师端,教师端发送图片给学生端
sendSocket = [[AsyncUdpSocket alloc]initWithDelegate:self];
serverSocket = [[AsyncUdpSocket alloc]initWithDelegate:self];
//服务端绑定port
[serverSocket bindToPort:5678 error:nil];
//持续观察
[serverSocket receiveWithTimeout:-1 tag:100];
}
- (void)createView{
if (STU) {
//学生端
imageView = [[UIImageView alloc]initWithFrame:self.view.frame];
[self.view addSubview:imageView];
}else{
//教师端
numberLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 200, 300)];
numberLabel.center = self.view.center;
numberLabel.textAlignment =NSTextAlignmentCenter;
[self.view addSubview:numberLabel];
}
}
#pragma mark -- AsyncUdpSocketDelegate
-(void)onUdpSocket:(AsyncUdpSocket *)sock didSendDataWithTag:(long)tag{
//发送完毕
}
- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port{
//接受数据
//教师端接受学生的ip
//学生端接受教师的图片
if (STU) {
if (imageView) {
imageView.image = [UIImage imageWithData:data];
}
imageView.image = [UIImage imageWithData:data];
}else{
//记录学生IP,须要一个数组,对新的数据进行追加,对旧的数据忽略
if (![self.ipArray containsObject:host]) {
[self.ipArray addObject:host];
}
}
//
[sock receiveWithTimeout:-1 tag:100];
return YES;
}
@end
iOS中UDP的使用的更多相关文章
- 聊聊iOS中网络编程长连接的那些事
1.长连接在iOS开发中的应用 常见的短连接应用场景:一般的App的网络请求都是基于Http1.0进行的,使用的是NSURLConnection.NSURLSession或者是AFNetworking ...
- iOS中支付宝集成
iOS中支付宝集成 如今各种的App中都使用了三方支付的功能,现在将我在使用支付宝支付集成过程的心得分享一下,希望对大家都能有所帮助 要集成一个支付宝支付过程的环境,大致需要: 1>公司:先与支 ...
- iOS中数据库应用基础
iOS 数据库入门 一.数据库简介 1.什么是数据库? 数据库(Database) 是按照数据结构来组织,存储和管理数据的仓库 数据库可以分为2大种类 关系型数据库(主流) PC端 Oracle My ...
- 正则表达式在iOS中的运用
1.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...
- iOS 中的 HotFix 方案总结详解
相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dynamic Framework(Ap ...
- iOS中使用正则
一.什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式.正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分.它可以迅速地用极简单的方式 ...
- IOS中div contenteditable=true无法输入
在IOS中<div contenteditable="true"></div>中点击时可以弹出键盘但是无法输入.加一个样式-webkit-user-sele ...
- 谈谈iOS中的屏幕方向
众所周知,iOS中提供了[UIDevice currentDevice].orientation与[UIApplication sharedApplication].statusBarOrientat ...
- iOS中assign、copy 、retain等关键字的含义
iOS中assign.copy .retain等关键字的含义 转自:http://my.oschina.net/majiage/blog/267409 assign: 简单赋值,不更改索引计数cop ...
随机推荐
- fetch上传cookie数据方法
Fetch 请求默认是不带cookie的.需要设置fetch的第二个参数: 先来看下,请求头部信息Request method - 使用的HTTP动词,GET, POST, PUT, DELETE, ...
- OpenJudge 2971 抓住那头牛
总时间限制: 2000ms 内存限制: 65536kB 描述 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0< ...
- 【HDOJ5951】Winning an Auction(博弈DP)
题意:A和B两个人做一个拍卖游戏.每一轮两人分别给出一个价格,出价高者获得该轮的物品,出价相同则奇数轮A优先,偶数轮B优先. 两个人的目标都是最大化自己的商品数量,给定轮数n与两人分别的总资金a,b, ...
- [CODEVS1051]接龙游戏
题目描述 给出了N个单词,已经按长度排好了序.如果某单词i是某单词j的前缀,i->j算一次接龙(两个相同的单词不能算接龙). 你的任务是:对于输入的单词,找出最长的龙. 输入描述 Input D ...
- 8个学习.net的博客链接 (以前收藏过更多的,被百度新版搞没了,恨死了)
原文发布时间为:2012-09-18 -- 来源于本人的百度文章 [由搬家工具导入] Simone Chiaretta’s CodeClimber http://www.haacked.com/ ( ...
- 【Reship】use of tangible T4 template engine
1.first of all 之前在 “使用T4模板生成代码 – 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “Multipl ...
- 【Visual Studio】Visual Studio 2010 "LNK1123: 转换到 COFF 期间失败: 文件无效或损坏" 的解决方法
1.将 项目|项目属性|配置属性|连接器|清单文件|嵌入清单 “是”改为“否”. 2.找到 C:\Windows\winsxs\x86_netfx-cvtres_for_vc_and_vb_b03f5 ...
- hdu 4786(生成树)
Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 双端队列-deque【集vector与list于一身的牺牲内存换功能完善】
看到双端队列(deque)了,书上是这样说的:除了栈和队列外还有一种限定性数据结构是双端队列:双端队列是限定插入和删除操作在表的两端进行的线性表:尽管双端队列看起来似乎比栈和队列更灵活,但实际上在应用 ...
- workflow engine Ruote初体验之三(条件与美元符号)
条件 我们可以用:if和:unless公共属性来进行条件判断,或者使用if,given,once或者equals(已经过时)关键字. 使用:if属性: 1 cursor do 2 participan ...