1 需要导入框架: QuartzCore.framework SystemConfiguration.framework libicucore.dylib
//GameKit.framework蓝牙传输需要导入
2 .h文件引入头文件
#import "HTTPServer.h"
#import <QuartzCore/QuartzCore.h>
#import <GameKit/GameKit.h>
#import <SystemConfiguration/CaptiveNetwork.h>
3 遵守WebFileResourceDelegate//GKPeerPickerControllerDelegate,GKSessionDelegate协议
4 创建需要的对象 HTTPServer *myServer;
//GKSession *session;蓝牙链接,通过这个对象2个设备传输数据
//GKPeerPickerController *myPicker;
5 创建socketServer
myServer = [[HTTPServer alloc] init];
[myServer setType:@"_http._tcp."];
[myServer setPort:8080];
[myServer setName:@"CocoaWebResource"];
[myServer setupBuiltInDocroot];
myServer.fileResourceDelegate = self;
6 开启移动端服务
- (IBAction)toggleService:(id)sender
{
NSError *error;
if ([(UISwitch*)sender isOn])
{
BOOL serverIsRunning = [httpServer start:&error];
if(!serverIsRunning)
{
NSLog(@"Error starting HTTP Server: %@", error);
}
[urlLabel setText:[NSString stringWithFormat:@"http://%@:%d", [myServer hostName], [httpServer port]]];
NSLog(@"httpWifiName------->%@",[myServer wifiName]);
[wifiNameLabel setText:[myServer wifiName]];
}
else
{
[myServer stop];
[urlLabel setText:@""];
}
}
7 实现代理方法
- (NSInteger)numberOfFiles
{
return [fileList count];
}
// the file name by the index
- (NSString*)fileNameAtIndex:(NSInteger)index
{
return [fileList objectAtIndex:index];
}
// provide full file path by given file name
- (NSString*)filePathForFileName:(NSString*)filename
{
//NSString* docDir = [NSString stringWithFormat:@"%@/Documents", NSHomeDirectory()];
NSString *docDir;
NSString *type = [filename pathExtension];
if ([type isEqualToString:@"pdf"]) {
docDir = PDF_PATH;
}
else if ([type isEqualToString:@"doc"]||[type isEqualToString:@"docx"])
{
docDir = DOC_PATH;
}
else if ([type isEqualToString:@"png"]||[type isEqualToString:@"jpg"])
{
docDir = IMAGES_PATH;
}
else{
docDir =OTHERS_PATH;
}
// NSString *docDir = DOCUMENTS_PATH;
return [NSString stringWithFormat:@"%@/%@", docDir, filename];
}
// handle newly uploaded file. After uploading, the file is stored in
// the temparory directory, you need to implement this method to move
// it to proper location and update the file list.
- (void)newFileDidUpload:(NSString*)name inTempPath:(NSString*)tmpPath
{
if (name == nil || tmpPath == nil)
return;
//NSString* docDir = [NSString stringWithFormat:@"%@/Documents", NSHomeDirectory()];
// NSString *docDir = DOCUMENTS_PATH;
NSString *docDir;
NSString *type = [name pathExtension];
if ([type isEqualToString:@"pdf"]) {
docDir = PDF_PATH;
}
else if ([type isEqualToString:@"doc"]||[type isEqualToString:@"docx"])
{
docDir = DOC_PATH;
}
else if ([type isEqualToString:@"png"]||[type isEqualToString:@"jpg"])
{
docDir = IMAGES_PATH;
}
else{
docDir =OTHERS_PATH;
}
NSString *path = [NSString stringWithFormat:@"%@/%@", docDir, name];
NSLog(@"newFileDidUpLoad----name---->%@",path);
NSFileManager *fm = [NSFileManager defaultManager];
NSError *error;
if (![fm moveItemAtPath:tmpPath toPath:path error:&error])
{
NSLog(@"can not move %@ to %@ because: %@", tmpPath, path, error );
}
[self loadFileList];
}
// implement this method to delete requested file and update the file list
- (void)fileShouldDelete:(NSString*)fileName
{
NSString *path = [self filePathForFileName:fileName];
NSFileManager *fm = [NSFileManager defaultManager];
NSError *error;
if(![fm removeItemAtPath:path error:&error])
{
NSLog(@"%@ can not be removed because:%@", path, error);
}
[self loadFileList];
}
#pragma -----buletooth-----
//=================================蓝牙相关方法==========================================
-(void)connectionButtonTapped
{
// allocate and setup the peer picker controller
bpicker = [[GKPeerPickerController alloc] init];
bpicker.delegate = self;
bpicker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;
[bpicker show];
}
-(GKSession *)peerPickerController:(GKPeerPickerController *)picker sessionForConnectionType:(GKPeerPickerConnectionType)type
{
currentSession = [[GKSession alloc] initWithSessionID:@"FR" displayName:nil sessionMode:GKSessionModePeer];
currentSession.delegate = self;
return currentSession;
}
//方法功能:判断数据传输状态
-(void)session:(GKSession*)session peer:(NSString*)peerID didChangeState:(GKPeerConnectionState)state
{
switch (state) {
case GKPeerStateConnected:
[currentSession setDataReceiveHandler :self withContext:nil];
// [connectionButton setEnabled:NO];
//[DisconnectButton setEnabled:YES];
NSLog(@"连接");
break;
case GKPeerStateDisconnected:
// [connectionButton setEnabled:YES];
//[DisconnectButton setEnabled:NO];
NSLog(@"连接断开");
//[currentSession release];
currentSession=nil;
break;
}
}
- (void)peerPickerController:(GKPeerPickerController *)picker didConnectToPeer:(NSString *)peerID {
printf("连接成功!\n");
}
- (void)peerPickerControllerDidCancel:(GKPeerPickerController *)picker {
printf("连接尝试被取消 \n");
}
//方法功能:接受数据
-(void)receiveData:(NSData*)data fromPeer:(NSString*)peer inSession:(GKSession*)session context:(void*)context
{
// Read the bytes in data and perform an application-specific action, then free the NSData object
//[self animationShow];
NSString* aStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSDictionary *ndata = [aStr objectFromJSONString];
NSLog(@"接受数据: %@", ndata);
NSString *bankStr = [ndata objectForKey:bank];
NSString *numberStr = [ndata objectForKey:cnumber];
NSString *atr = [ndata objectForKey:money];
NSLog(@"bankStr===%@\n number====%@\n atr====%@",bankStr,numberStr,atr);
}
//方法功能:断开链接
//- (IBAction) DisconnectButtonTapped:(id) sender{
//
// [self.currentSession disconnectFromAllPeers];
// currentSession=nil;
// [connectionButton setEnabled:YES];
// //[DisconnectButton setEnabled:NO];
//
//}
//方法功能:发送一个数据包
-(void)mySendDataToPeers:(NSMutableData*)data
{
NSLog(@"发送一个数据包");
if (currentSession) {
[currentSession sendDataToAllPeers:data withDataMode:GKSendDataReliable error:nil];
}
}
//方法功能:连接失败
-(void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString*)peerID toSession:(GKSession *)session{
currentSession=session;
session.delegate=self;
[session setDataReceiveHandler:self withContext:nil];
picker.delegate=nil;
[picker dismiss];
}