IOS UDP使用


转自:http://www.41443.com/HTML/iphone/20150814/391614.html

https://my.oschina.net/u/2448717/blog/499784

http://www.tuicool.com/articles/NfIJbmu

http://www.lxway.com/918189192.htm

https://segmentfault.com/q/1010000000692505

http://www.itstrike.cn/Question/923a426b-61fc-4aff-aaff-fb3e61a83f03.html

//
// 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 ()
{
//建立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];


//服务端绑定端口
[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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值