iOS中UDP的使用

來源:互聯網
上載者:User

標籤:

//
//  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];
    
    
    //服務端綁定連接埠
    [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的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.