服务器端
头文件
#import <UIKit/UIKit.h>
#import <MultipeerConnectivity/MultipeerConnectivity.h>
@interface ViewController : UIViewController<MCSessionDelegate,MCAdvertiserAssistantDelegate, UIImagePickerControllerDelegate,UINavigationControllerDelegate>
{
int j;
NSString *strname;
}
@property (strong,nonatomic) MCSession *session;
@property (strong,nonatomic) MCAdvertiserAssistant *advertiserAssistant;
@property (strong,nonatomic) UIImagePickerController *imagePickerController;
@property (weak, nonatomic) UITextView *log;//日志记
@end
主函数#import "ViewController.h"
#import <MultipeerConnectivity/MultipeerConnectivity.h>
@interface ViewController ()<MCSessionDelegate,MCAdvertiserAssistantDelegate, UIImagePickerControllerDelegate,UINavigationControllerDelegate>
//@property (weak, nonatomic) IBOutlet UIImageView *photo;
@end
@implementation ViewController
#pragma mark - 控制器视图事件
- (void)viewDidLoad {
[super viewDidLoad];
//创建节点,displayName是用于提供给周边设备查看和区分此服务的
MCPeerID *peerID=[[MCPeerID alloc]initWithDisplayName:@"KenshinCui_Advertiser"];
_session=[[MCSession alloc]initWithPeer:peerID];
_session.delegate=self;
//创建广播
_advertiserAssistant=[[MCAdvertiserAssistant alloc]initWithServiceType:@"cmj-stream" discoveryInfo:nil session:_session];
_advertiserAssistant.delegate=self;
UIButton *clientStart=[[UIButton alloc]initWithFrame:CGRectMake(20, 180, 80, 80)];
[clientStart setTitle:@"服務器啟動" forState:UIControlStateNormal];
clientStart.backgroundColor =[UIColor blackColor];
[clientStart addTarget:self action:@selector(startClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:clientStart];
UIButton *clientRenew=[[UIButton alloc]initWithFrame:CGRectMake(160, 20, 80, 80)];
[clientRenew setTitle:@"服務器刷新" forState:UIControlStateNormal];
clientRenew.backgroundColor =[UIColor blackColor];
[clientRenew addTarget:self action:@selector(transferClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:clientRenew];
UIButton *clientstop=[[UIButton alloc]initWithFrame:CGRectMake(260, 20, 80, 80)];
[clientstop setTitle:@"停止连接" forState:UIControlStateNormal];
clientstop.backgroundColor =[UIColor blackColor];
[clientstop addTarget:self action:@selector(stop) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:clientstop];
j=100;
UITextView *log=[[UITextView alloc]initWithFrame:CGRectMake(80, 120, 180, 180)];
[self.view addSubview:log];
_log=log;}
#pragma mark - UI事件
- (void)startClick {
//开始广播
[self.advertiserAssistant start];
}
- (void)transferClick {
j++;
NSString *valueStr=[NSString stringWithFormat:@"服务端--%d",j];
NSData *value=[valueStr dataUsingEncoding:NSUTF8StringEncoding];
//更新特征值
[self writeToLog:[NSString stringWithFormat:@"%@",valueStr]];
NSError *error=nil;
[self.session sendData:value toPeers:[self.session connectedPeers] withMode:MCSessionSendDataUnreliable error:&error];
}
-(void)stop
{
[self.advertiserAssistant stop];
[_session disconnect];
}
#pragma mark - MCSession代理方法
-(void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state{
NSLog(@"didChangeState");
switch (state) {
case MCSessionStateConnected:
NSLog(@"连接成功.");
// [self writeToLog:[NSString stringWithFormat:@"连接成功"]];
break;
case MCSessionStateConnecting:
NSLog(@"正在连接...");
break;
default:
NSLog(@"连接失败.");
break;
}
}
//接收数据
-(void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID{
NSLog(@"开始接收数据...");
NSString *aString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
dispatch_sync(dispatch_get_main_queue(), ^{
/* Do UI work here */
[self writeToLog:[NSString stringWithFormat:@"客户端那边发来:%@",aString]];
});
}
#pragma mark - MCAdvertiserAssistant代理方法
#pragma mark - UIImagePickerController代理方法
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
UIImage *image=[info objectForKey:UIImagePickerControllerOriginalImage];
NSError *error=nil;
NSLog(@"开始发送数据...");
if (error) {
NSLog(@"发送数据过程中发生错误,错误信息:%@",error.localizedDescription);
}
[self.imagePickerController dismissViewControllerAnimated:YES completion:nil];
}
-(void)writeToLog:(NSString *)info{
self.log.text=[NSString stringWithFormat:@"%@\r\n%@",self.log.text,info];
}
@end
客户端头文件
#import <UIKit/UIKit.h>
#import <MultipeerConnectivity/MultipeerConnectivity.h>
@interface ViewController : UIViewController<MCSessionDelegate,MCBrowserViewControllerDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>
{
int i;
NSString *strname;
}
@property (strong,nonatomic) MCSession *session;
@property (strong,nonatomic) MCBrowserViewController *browserController;
@property (strong,nonatomic) UIImagePickerController *imagePickerController;
@property (weak, nonatomic) UITextView *log; //日志记录
@end
主函数
#import "ViewController.h"
@interface ViewController ()<MCSessionDelegate,MCBrowserViewControllerDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>
//@property (weak, nonatomic) IBOutlet UIImageView *photo;
@end
@implementation ViewController
#pragma mark - 控制器视图事件
- (void)viewDidLoad {
[super viewDidLoad];
//创建节点
MCPeerID *peerID=[[MCPeerID alloc]initWithDisplayName:@"KenshinCui"];
//创建会话
_session=[[MCSession alloc]initWithPeer:peerID];
_session.delegate=self;
UIButton *clientStart=[[UIButton alloc]initWithFrame:CGRectMake(20, 20, 80, 80)];
[clientStart setTitle:@"客戶端啟動" forState:UIControlStateNormal];
clientStart.backgroundColor =[UIColor blackColor];
[clientStart addTarget:self action:@selector(startClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:clientStart];
UIButton *clientRenew=[[UIButton alloc]initWithFrame:CGRectMake(160, 20, 80, 80)];
[clientRenew setTitle:@"客戶端刷新" forState:UIControlStateNormal];
clientRenew.backgroundColor =[UIColor blackColor];
[clientRenew addTarget:self action:@selector(transferClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:clientRenew];
UIButton *clientstop=[[UIButton alloc]initWithFrame:CGRectMake(260, 20, 80, 80)];
[clientstop setTitle:@"停止连接" forState:UIControlStateNormal];
clientstop.backgroundColor =[UIColor blackColor];
[clientstop addTarget:self action:@selector(stop) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:clientstop];
UITextView *log=[[UITextView alloc]initWithFrame:CGRectMake(80, 120, 180, 180)];
i=0;
strname=@"客户消息";
[self.view addSubview:log];
_log=log;
}
#pragma mark- UI事件
- (void)startClick {
_browserController=[[MCBrowserViewController alloc]initWithServiceType:@"cmj-stream" session:self.session];
_browserController.delegate=self;
[self presentViewController:_browserController animated:YES completion:nil];
}
- (void)transferClick{
i++;
NSString *valueStr=[NSString stringWithFormat:@"客户端--%d",i];
NSData *value=[valueStr dataUsingEncoding:NSUTF8StringEncoding];
//更新特征值
[self writeToLog:[NSString stringWithFormat:@"%@",valueStr]];
NSError *error=nil;
[self.session sendData:value toPeers:[self.session connectedPeers] withMode:MCSessionSendDataUnreliable error:&error];
}
-(void)stop
{
[_session disconnect];
}
#pragma mark - MCBrowserViewController代理方法
-(void)browserViewControllerDidFinish:(MCBrowserViewController *)browserViewController{
NSLog(@"已选择");
[self.browserController dismissViewControllerAnimated:YES completion:nil];
}
-(void)browserViewControllerWasCancelled:(MCBrowserViewController *)browserViewController{
NSLog(@"取消浏览.");
[self.browserController dismissViewControllerAnimated:YES completion:nil];
}
#pragma mark - MCSession代理方法
-(void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state{
NSLog(@"didChangeState");
switch (state) {
case MCSessionStateConnected:
NSLog(@"连接成功.");
[self.browserController dismissViewControllerAnimated:YES completion:nil];
break;
case MCSessionStateConnecting:
NSLog(@"正在连接...");
break;
default:
NSLog(@"连接失败.");
break;
}
}
//接收数据
-(void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID{
NSLog(@"开始接收数据...");
// NSData *value=[valueStr dataUsingEncoding:NSUTF8StringEncoding];
//更新特征值
NSString *aString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
dispatch_sync(dispatch_get_main_queue(), ^{
/* Do UI work here */
[self writeToLog:[NSString stringWithFormat:@"服务端那边发来:%@",aString]];
});
}
#pragma mark - UIImagePickerController代理方法
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
UIImage *image=[info objectForKey:UIImagePickerControllerOriginalImage];
// [self.photo setImage:image];
//发送数据给所有已连接设备
NSError *error=nil;
[self.session sendData:UIImagePNGRepresentation(image) toPeers:[self.session connectedPeers] withMode:MCSessionSendDataUnreliable error:&error];
NSLog(@"开始发送数据...");
if (error) {
NSLog(@"发送数据过程中发生错误,错误信息:%@",error.localizedDescription);
}
[self.imagePickerController dismissViewControllerAnimated:YES completion:nil];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
[self.imagePickerController dismissViewControllerAnimated:YES completion:nil];
}
-(void)writeToLog:(NSString *)info{
self.log.text=[NSString stringWithFormat:@"%@\r\n%@",self.log.text,info];
}
@end