蓝牙实现对等网络连接 <GameKit/GameKit.h>

/*
 1.设置UI界面
 2.引入框架
 3.点击选择照片
 4.连接蓝牙设备
 5.实现蓝牙的代理方法
 6.发送照片
 */

#import "ViewController.h"
#import <GameKit/GameKit.h>

@interface ViewController ()<UINavigationControllerDelegate, UIImagePickerControllerDelegate, GKPeerPickerControllerDelegate>

@property (nonatomic, strong) UIImageView *imgView;
@property (nonatomic, strong) UIButton *selectImgBtn;
@property (nonatomic, strong) UIButton *connectionDeviceBtn;
@property (nonatomic, strong) UIButton *sendImgBtn;
@property (nonatomic, strong) GKSession *seccion; // first deprecated in iOS 7.0 

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    _imgView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 20, self.view.bounds.size.width - 20, self.view.bounds.size.width - 20)];
    _imgView.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview:_imgView];

    _selectImgBtn = [UIButton buttonWithType:UIButtonTypeSystem];
    _selectImgBtn.frame = CGRectMake(10, CGRectGetMaxY(_imgView.frame) + 30, 60, 30);
    [_selectImgBtn setTitle:@"选择照片" forState:UIControlStateNormal];
    [self.view addSubview:_selectImgBtn];
    [_selectImgBtn addTarget:self action:@selector(clickSelectImgBtnAction) forControlEvents:UIControlEventTouchUpInside];

    _connectionDeviceBtn = [UIButton buttonWithType:UIButtonTypeSystem];
    _connectionDeviceBtn.frame = CGRectMake(0, 0, 60, 30);
    CGPoint p = CGPointMake(self.view.center.x, _selectImgBtn.center.y);
    _connectionDeviceBtn.center = p;
    [_connectionDeviceBtn setTitle:@"连接设备" forState:UIControlStateNormal];
    [self.view addSubview:_connectionDeviceBtn];
    [_connectionDeviceBtn addTarget:self action:@selector(clickConnectionDeviceBtnAction) forControlEvents:UIControlEventTouchUpInside];

    _sendImgBtn = [UIButton buttonWithType:UIButtonTypeSystem];
    _sendImgBtn.frame = CGRectMake(self.view.bounds.size.width - 70, CGRectGetMinY(_selectImgBtn.frame), 60, 30);
    [_sendImgBtn setTitle:@"发送照片" forState:UIControlStateNormal];
    [self.view addSubview:_sendImgBtn];
    [_sendImgBtn addTarget:self action:@selector(clickSendImgBtnAction) forControlEvents:UIControlEventTouchUpInside];
}

// 选择图片
- (void)clickSelectImgBtnAction {

    // 0.判断照片是否可用
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

        return;
    }
    // 1.创建控制器
    UIImagePickerController *ipc = [UIImagePickerController new];
    // 2.设置图片源
    ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    // 3.设置代理
    ipc.delegate = self;
    // 4.显示控制器
    [self presentViewController:ipc animated:YES completion:nil];

}

// 连接设备
- (void)clickConnectionDeviceBtnAction {

    // 1.创建控制器
    GKPeerPickerController *pic = [GKPeerPickerController new];  // first deprecated in iOS 7.0
    // 2.连接设备获取数据
    pic.delegate = self;
    // 3.显示控制器
    [pic show];
}

// 发送图片
- (void)clickSendImgBtnAction {

    // 0.需要一个data对象,把图片转化成data数据
    // CGFloat compressionQuality 精度,压缩比
    NSData *data = UIImageJPEGRepresentation(self.imgView.image, 0.2);
    // 1.通过session发送数据
    /*
     数据报(数据包,小块)
     GKSendDataReliable, 网络数据发送有误的时候,可以保证消息按照发送的顺序到达
     GKSendDataUnreliable 只发一次
     */
    [self.seccion sendDataToAllPeers:data withDataMode:GKSendDataReliable error:nil]; // first deprecated in iOS 7.0
} 

#pragma 相册的代理 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {

  NSLog(@"--info-- = %@", info);   UIImage *image = info[UIImagePickerControllerOriginalImage];   _imgView.image = image;   [picker dismissViewControllerAnimated:YES completion:nil]; } 

#pragma mark - GKPeerPickerControllerDelegate - (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session { 

  self.seccion = session; 

  // 1.设置session会话,Handler(句柄,类似代理)    [session setDataReceiveHandler:self withContext:nil]; 

  // 2.控制器的移除    [picker dismiss]; } 

// 从setDataReceiveHandler里面找出来 - (void)receiveData:(NSData *)data formPeer:(NSString *)peer inSession:(GKSession *)session context:(void *)context { 

  UIImage *image = [UIImage imageWithData:data];   _imgView.image = image; }

原文地址:https://www.cnblogs.com/xuzb/p/8963753.html

时间: 2024-10-19 23:15:09

蓝牙实现对等网络连接 <GameKit/GameKit.h>的相关文章

Android Wi-Fi Peer-to-Peer(Android的Wi-Fi P2P对等网络)

Wi-Fi peer-to-peer(P2P,对等网络),它同意具备对应硬件的Android 4.0(API level 14)或者更高版本号的设备能够直接通过wifi而不须要其他中间中转节点就能直接通信(Android的Wi-Fi P2P框架符合Wi-Fi联盟的Wi-Fi Direct?直连认证标志).使用这些API.你能够搜索并连接其他相同支持Wi-Fi P2P的设备,然后再通过一个快速的连接进行互相通信,而且这个连接的有效距离要比蓝牙连接的有效距离要长的多. 这对于须要在用户之间共享数据的

p2p (对等网络)

对等网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构[1]  ,是对等计算模型在应用层形成的一种组网或网络形式."Peer"在英语里有"对等者.伙伴.对端"的意义.因此,从字面上,P2P可以理解为对等计算或对等网络.国内一些媒体将P2P翻译成"点对点"或者"端对端",学术界则统一称为对等网络(Peer-to-peer networking)或对等计算(Peer-to-peer compu

VMWare虚拟机 网络连接模式

1 VMWare虚拟机bridged.host-only和NAT网络模式的区别和用法 VMWare提供了三种工作模式,它们是bridged(bridged模式:对应网卡vment0).NAT(网络地址转换模式:对应网卡vment8)和host-only(主机模式:对应网卡vment1).三个网卡可以理解为三个通道.要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式.(在Linux下面ifconfig显示eth0第一个网卡IP,(eth就是ethernet以太网,在这里指网络接口

对等网络的定义

网络的参与者共享他们所拥有的一部分硬件资源(处理能力.存储能力.网络连接能力.打印机等),这些共享资源通过网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体.在此网络中的参与者既是资源.服务和内容的提供者(Server),又是资源.服务和内容的获取者(Client)在P2P网络环境中,彼此连接的多台计算机之间都处于对等的地位,各台计算机有相同的功能,无主从之分,一台计算机既可作为服务器,设定共享资源供网络中其他计算机所使用,又可以作为工作站,整个网络一般来说不依赖专用的集

VMware Workstation中网络连接之桥接、NAT和Host-only

在Windows XP系统中,安装好VMware Workstation虚拟机软件以后,我们可以查看一下"网络连接"窗口: 在窗口中多出了两块网卡: VMware Network Adapter VMnet1:VMware网络连接中Host-only模式的网络接口. VMware Network Adapter VMnet8:VMware网络连接中NAT模式的网络接口. 查看VMware的网络连接模式:桥接.NAT和Host-only 1. 假设我们已经安装好了Windows XP虚拟

VMware 虚拟机的网络连接方式详解

VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1.bridged(桥接模式)             选择桥接之后一定要重新启动主机的本地连接,否则桥接无法上网使用.这个问题可能出现在大部分人身上. 在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器.在桥接模式下,你需要手工为虚拟系统配置 IP

寻找正在连接中的网络连接

 寻找正在连接中的网络连接,并开启网络连接的网络连接共享功能. 注意:要设置为管理员权限启动project. 否则EnableSharing会失败. #include <Windows.h> #include <NetCon.h> #include <locale> #include <stdio.h> #pragma comment(lib,"Iphlpapi.lib") #pragma comment(lib,"Rpcr

虚拟机网络连接模式中桥接模式和NAT模式的区别

1.桥接模式:当虚拟机系统的网络连接模式为桥接模式时,相当于在主机系统和虚拟机系统之间连接了一个网桥,而网桥两端的网络都属于同一网络,主机和虚拟机是处于同一网络中的对等主机. 实例,在使用Xshell与Linux的连接时需要使用桥接模式,例如虚拟机linux系统的网络设置: IP:192.168.23.135 子网掩码:255.255.255.0 默认网关:192.168.23.2 与虚拟网卡VMware Virtual Ethernet Adapter for VMnet8之间用桥接模式. V

Win7+VMware Workstation环境下的CentOS-Linux网络连接设置

转自:http://blog.csdn.net/pang040328/article/details/12427359 首先介绍一下VMware的网络连接方式.我们的主机通常经过物理网卡与局域网和Internet相连接,而虚拟机既已被称之为虚拟计算机,那虚拟网卡也必然存在,而如果我们想让虚拟计算机能连接到局域网或者Internet,那就必须让虚拟网卡和主机的真实物理网卡协同起来.VMware提供了三种将虚拟网卡和物理网卡捆绑起来的方式,即桥接(Bridge)模式,网络地址转换(Network A