你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS中UDP的使用

iOS中UDP的使用

編輯:IOS開發綜合
//
// 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

























  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved