- 浏览: 644313 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
lizaochengwen:
网络请求碰到的中文乱码使用encodeURL吧- (NSStr ...
iPhone开发/iPad开发 中文乱码问题 -
hhb19900618:
还是没弄懂怎么解决了中文乱码? 正确代码能重写贴出吗
iPhone开发/iPad开发 中文乱码问题 -
zhengjj_2009:
我的理解是讲ipa文件解压缩之后再重新打包,已经破坏了签名,所 ...
xcodebuild和xcrun实现自动打包iOS应用程序 -
zhengjj_2009:
我参考你的“ 从ipa格式的母包生成其它渠道包的shell脚本 ...
xcodebuild和xcrun实现自动打包iOS应用程序 -
同一片天空:
问题果然解决了
iOS 搭建 XMPP实现环境
在ios扫描公共区域内wifi信息中,写了实现wifi扫描的一种方法,但是那种方法扫描出来的wifi信息不全,下面是扫描全部wifi信息的实现方法:
#import <CoreFoundation/CoreFoundation.h>
#import <Foundation/NSTimer.h>
#import <Foundation/Foundation.h>
#include <dlfcn.h>
#include <ifaddrs.h>
#include <arpa/inet.h>
@interface MSNetworksManager : NSObject {
NSMutableDictionary *networks;
NSArray *types;
int autoScanInterval;
bool scanning;
bool autoScanning;
void *libHandle;
void *airportHandle;
int (*open)(void *);
int (*bind)(void *, NSString *);
int (*close)(void *);
int (*associate)(void *, NSDictionary*, NSString*);
int (*scan)(void *, NSArray **, void *);
//int (*open)(void *);
//int (*bind)(void *, NSString *);
//int (*close)(void *);
//int (*scan)(void *, NSArray **, void *);
//int (*associate)(void*, NSDictionary *, NSString *);
int (*getpower)(void *, char *);
int (*setpower)(void*, char*);
}
+ (MSNetworksManager *)sharedNetworksManager;
+ (NSNumber *)numberFromBSSID:(NSString *) bssid;
- (NSMutableDictionary *)networks;
- (NSDictionary *)networks:(int) type;
- (NSDictionary *)network:(NSString *) aNetwork;
- (id)init;
- (void)dealloc;
- (int)numberOfNetworks;
- (int)numberOfNetworks:(int) type;
- (int)autoScanInterval;
- (void)scan;
- (void)removeNetwork:(NSString *)aNetwork;
- (void)removeAllNetworks;
- (void)removeAllNetworks:(int) type;
- (void)autoScan:(bool)scan;
- (bool)autoScan;
- (void)scanSelector:(id)param;
- (void)setAutoScanInterval:(int) scanInterval;
- (int)associateNetwork: (NSDictionary *)bss: (NSString *)password;
- (int)getPower: (char *)power;
- (int)setPower: (char *)power;
- (NSString *) localIPAddress;
@end
.m文件:
#import "MSNetworksManager.h"
static MSNetworksManager *NetworksManager;
@implementation MSNetworksManager
+ (MSNetworksManager *)sharedNetworksManager
{
if (!NetworksManager)
NetworksManager = [[MSNetworksManager alloc] init];
return NetworksManager;
}
+ (NSNumber *)numberFromBSSID:(NSString *) bssid
{
int x = 0;
uint64_t longmac;
int MAC_LEN = 6;
short unsigned int *bs_in = malloc(sizeof(short unsigned int) * MAC_LEN);
if (sscanf([bssid cStringUsingEncoding: [NSString defaultCStringEncoding]],"%hX:%hX:%hX:%hX:%hX:%hX",&bs_in[0], &bs_in[1], &bs_in[2], &bs_in[3], &bs_in[4], &bs_in[5]) == MAC_LEN)
{
for (x = 0; x < MAC_LEN; x++)
longmac |= (uint64_t) bs_in[x] << ((MAC_LEN – x – 1) *;
} else {
NSLog(@"WARN: invalid mac address! %@",self);
}
free(bs_in);
return [NSNumber numberWithUnsignedLongLong:longmac];
}
- (NSDictionary *)networks
{
// TODO: Implement joining of network types
return networks;
}
- (NSDictionary *)networks:(int) type
{
// TODO: Implement selecting of network types
if(type != 0)
NSLog(@"WARN: Non 80211 networks are not supported. %@",self);
return networks;
}
- (NSDictionary *)network:(NSString *) aNetwork
{
return [networks objectForKey: aNetwork];
}
- (id)init
{
self = [super init];
NetworksManager = self;
networks = [[NSMutableDictionary alloc] init];
types = [NSArray arrayWithObjects:@"80211", @"Bluetooth", @"GSM", nil];
[types retain];
autoScanInterval = 5; //seconds
// For iPhone 2.0
// libHandle = dlopen("/System/Library/PrivateFrameworks/Apple80211.framework/Apple80211", RTLD_LAZY);
// For iPhone 3.0
libHandle = dlopen("/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager", RTLD_LAZY);
open = dlsym(libHandle, "Apple80211Open");
bind = dlsym(libHandle, "Apple80211BindToInterface");
close = dlsym(libHandle, "Apple80211Close");
scan = dlsym(libHandle, "Apple80211Scan");
associate = dlsym(libHandle, "Apple80211Associate");
getpower = dlsym(libHandle, "Apple80211GetPower");
setpower = dlsym(libHandle, "Apple80211SetPower");
open(&airportHandle);
bind(airportHandle, @"en0");
return self;
}
- (void)dealloc
{
close(&airportHandle);
[super dealloc];
}
- (int)numberOfNetworks
{
return [networks count];
}
- (int)numberOfNetworks:(int) type
{
// TODO: Implement selecting of network types
if(type != 0)
NSLog(@"WARN: Non 80211 networks are not supported. %@",self);
return [networks count];
}
- (int)autoScanInterval
{
return autoScanInterval;
}
- (void)scan
{
// NSLog(@"Scanning…");
scanning = true;
[[NSNotificationCenter defaultCenter] postNotificationName:@"startedScanning" object:self];
NSArray *scan_networks;
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];
[parameters setObject:@"YES" forKey:@"SCAN_MERGE"];
scan(airportHandle, &scan_networks, parameters);
int i;
//bool changed;
[networks removeAllObjects];
for (i = 0; i < [scan_networks count]; i++) {
[networks setObject:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"] forKey:[[scan_networks objectAtIndex: i] objectForKey:@"RSSI"]];
}
NSLog(@"Scan Finished…");
}
- (void)removeNetwork:(NSString *)aNetwork
{
[networks removeObjectForKey:aNetwork];
}
- (void)removeAllNetworks
{
[networks removeAllObjects];
}
- (void)removeAllNetworks:(int) type
{
if(type != 0)
NSLog(@"WARN: Non 80211 networks are not supported. %@",self);
[networks removeAllObjects];
}
- (void)autoScan:(bool) bScan
{
autoScanning = bScan;
if(bScan) {
[self scan];
[NSTimer scheduledTimerWithTimeInterval:autoScanInterval target:self selector:@selector (scanSelector:) userInfo:nil repeats:NO];
}
NSLog(@"WARN: Automatic scanning not fully supported yet. %@",self);
}
- (bool)autoScan
{
return autoScanning;
}
- (void)scanSelector:(id)param {
if(autoScanning) {
[self scan];
[NSTimer scheduledTimerWithTimeInterval:autoScanInterval target:self selector:@selector (scanSelector:) userInfo:nil repeats:NO];
}
}
- (void)setAutoScanInterval:(int) scanInterval
{
autoScanInterval = scanInterval;
}
- (int)associateNetwork:(NSDictionary *)bss: (NSString *)password
{
if(bss!=nil) {
NSLog(@"associateNetwork");
int ret = associate(airportHandle, bss, password);
return ret;
}else
return -1;
}
- (int)getPower: (char *)power
{
return getpower(airportHandle, power);
}
- (int)setPower: (char *)power
{
return setpower(airportHandle, power);
}
- (NSString *) localIPAddress
{
NSString *address = @"error";
struct ifaddrs *interfaces = NULL;
struct ifaddrs *temp_addr = NULL;
int success = 0;
// retrieve the current interfaces – returns 0 on success
success = getifaddrs(&interfaces);
if (success == 0)
{
// Loop through linked list of interfaces
temp_addr = interfaces;
while(temp_addr != NULL)
{
if(temp_addr->ifa_addr->sa_family == AF_INET)
{
// Check if interface is en0 which is the wifi connection on the iPhone
if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"])
{
// Get NSString from C String
address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
}
}
temp_addr = temp_addr->ifa_next;
}
}
// Free memory
freeifaddrs(interfaces);
return address;
}
@end
添加到项目中即可。
#import <CoreFoundation/CoreFoundation.h>
#import <Foundation/NSTimer.h>
#import <Foundation/Foundation.h>
#include <dlfcn.h>
#include <ifaddrs.h>
#include <arpa/inet.h>
@interface MSNetworksManager : NSObject {
NSMutableDictionary *networks;
NSArray *types;
int autoScanInterval;
bool scanning;
bool autoScanning;
void *libHandle;
void *airportHandle;
int (*open)(void *);
int (*bind)(void *, NSString *);
int (*close)(void *);
int (*associate)(void *, NSDictionary*, NSString*);
int (*scan)(void *, NSArray **, void *);
//int (*open)(void *);
//int (*bind)(void *, NSString *);
//int (*close)(void *);
//int (*scan)(void *, NSArray **, void *);
//int (*associate)(void*, NSDictionary *, NSString *);
int (*getpower)(void *, char *);
int (*setpower)(void*, char*);
}
+ (MSNetworksManager *)sharedNetworksManager;
+ (NSNumber *)numberFromBSSID:(NSString *) bssid;
- (NSMutableDictionary *)networks;
- (NSDictionary *)networks:(int) type;
- (NSDictionary *)network:(NSString *) aNetwork;
- (id)init;
- (void)dealloc;
- (int)numberOfNetworks;
- (int)numberOfNetworks:(int) type;
- (int)autoScanInterval;
- (void)scan;
- (void)removeNetwork:(NSString *)aNetwork;
- (void)removeAllNetworks;
- (void)removeAllNetworks:(int) type;
- (void)autoScan:(bool)scan;
- (bool)autoScan;
- (void)scanSelector:(id)param;
- (void)setAutoScanInterval:(int) scanInterval;
- (int)associateNetwork: (NSDictionary *)bss: (NSString *)password;
- (int)getPower: (char *)power;
- (int)setPower: (char *)power;
- (NSString *) localIPAddress;
@end
.m文件:
#import "MSNetworksManager.h"
static MSNetworksManager *NetworksManager;
@implementation MSNetworksManager
+ (MSNetworksManager *)sharedNetworksManager
{
if (!NetworksManager)
NetworksManager = [[MSNetworksManager alloc] init];
return NetworksManager;
}
+ (NSNumber *)numberFromBSSID:(NSString *) bssid
{
int x = 0;
uint64_t longmac;
int MAC_LEN = 6;
short unsigned int *bs_in = malloc(sizeof(short unsigned int) * MAC_LEN);
if (sscanf([bssid cStringUsingEncoding: [NSString defaultCStringEncoding]],"%hX:%hX:%hX:%hX:%hX:%hX",&bs_in[0], &bs_in[1], &bs_in[2], &bs_in[3], &bs_in[4], &bs_in[5]) == MAC_LEN)
{
for (x = 0; x < MAC_LEN; x++)
longmac |= (uint64_t) bs_in[x] << ((MAC_LEN – x – 1) *;
} else {
NSLog(@"WARN: invalid mac address! %@",self);
}
free(bs_in);
return [NSNumber numberWithUnsignedLongLong:longmac];
}
- (NSDictionary *)networks
{
// TODO: Implement joining of network types
return networks;
}
- (NSDictionary *)networks:(int) type
{
// TODO: Implement selecting of network types
if(type != 0)
NSLog(@"WARN: Non 80211 networks are not supported. %@",self);
return networks;
}
- (NSDictionary *)network:(NSString *) aNetwork
{
return [networks objectForKey: aNetwork];
}
- (id)init
{
self = [super init];
NetworksManager = self;
networks = [[NSMutableDictionary alloc] init];
types = [NSArray arrayWithObjects:@"80211", @"Bluetooth", @"GSM", nil];
[types retain];
autoScanInterval = 5; //seconds
// For iPhone 2.0
// libHandle = dlopen("/System/Library/PrivateFrameworks/Apple80211.framework/Apple80211", RTLD_LAZY);
// For iPhone 3.0
libHandle = dlopen("/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager", RTLD_LAZY);
open = dlsym(libHandle, "Apple80211Open");
bind = dlsym(libHandle, "Apple80211BindToInterface");
close = dlsym(libHandle, "Apple80211Close");
scan = dlsym(libHandle, "Apple80211Scan");
associate = dlsym(libHandle, "Apple80211Associate");
getpower = dlsym(libHandle, "Apple80211GetPower");
setpower = dlsym(libHandle, "Apple80211SetPower");
open(&airportHandle);
bind(airportHandle, @"en0");
return self;
}
- (void)dealloc
{
close(&airportHandle);
[super dealloc];
}
- (int)numberOfNetworks
{
return [networks count];
}
- (int)numberOfNetworks:(int) type
{
// TODO: Implement selecting of network types
if(type != 0)
NSLog(@"WARN: Non 80211 networks are not supported. %@",self);
return [networks count];
}
- (int)autoScanInterval
{
return autoScanInterval;
}
- (void)scan
{
// NSLog(@"Scanning…");
scanning = true;
[[NSNotificationCenter defaultCenter] postNotificationName:@"startedScanning" object:self];
NSArray *scan_networks;
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];
[parameters setObject:@"YES" forKey:@"SCAN_MERGE"];
scan(airportHandle, &scan_networks, parameters);
int i;
//bool changed;
[networks removeAllObjects];
for (i = 0; i < [scan_networks count]; i++) {
[networks setObject:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"] forKey:[[scan_networks objectAtIndex: i] objectForKey:@"RSSI"]];
}
NSLog(@"Scan Finished…");
}
- (void)removeNetwork:(NSString *)aNetwork
{
[networks removeObjectForKey:aNetwork];
}
- (void)removeAllNetworks
{
[networks removeAllObjects];
}
- (void)removeAllNetworks:(int) type
{
if(type != 0)
NSLog(@"WARN: Non 80211 networks are not supported. %@",self);
[networks removeAllObjects];
}
- (void)autoScan:(bool) bScan
{
autoScanning = bScan;
if(bScan) {
[self scan];
[NSTimer scheduledTimerWithTimeInterval:autoScanInterval target:self selector:@selector (scanSelector:) userInfo:nil repeats:NO];
}
NSLog(@"WARN: Automatic scanning not fully supported yet. %@",self);
}
- (bool)autoScan
{
return autoScanning;
}
- (void)scanSelector:(id)param {
if(autoScanning) {
[self scan];
[NSTimer scheduledTimerWithTimeInterval:autoScanInterval target:self selector:@selector (scanSelector:) userInfo:nil repeats:NO];
}
}
- (void)setAutoScanInterval:(int) scanInterval
{
autoScanInterval = scanInterval;
}
- (int)associateNetwork:(NSDictionary *)bss: (NSString *)password
{
if(bss!=nil) {
NSLog(@"associateNetwork");
int ret = associate(airportHandle, bss, password);
return ret;
}else
return -1;
}
- (int)getPower: (char *)power
{
return getpower(airportHandle, power);
}
- (int)setPower: (char *)power
{
return setpower(airportHandle, power);
}
- (NSString *) localIPAddress
{
NSString *address = @"error";
struct ifaddrs *interfaces = NULL;
struct ifaddrs *temp_addr = NULL;
int success = 0;
// retrieve the current interfaces – returns 0 on success
success = getifaddrs(&interfaces);
if (success == 0)
{
// Loop through linked list of interfaces
temp_addr = interfaces;
while(temp_addr != NULL)
{
if(temp_addr->ifa_addr->sa_family == AF_INET)
{
// Check if interface is en0 which is the wifi connection on the iPhone
if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"])
{
// Get NSString from C String
address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
}
}
temp_addr = temp_addr->ifa_next;
}
}
// Free memory
freeifaddrs(interfaces);
return address;
}
@end
添加到项目中即可。
发表评论
-
SOCK_STREAM和SOCK_DGRAM
2015-07-23 20:08 1571sock_stream 是有保障的(即能保证数据正确传送到 ... -
SOCKET bind INADDR_LOOPBACK和INADDR_ANY的区别
2015-07-23 19:49 2008今天写程序时候,服务器端启动了,然后客户端总是连接不上,con ... -
htons()
2015-07-23 19:26 534在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺 ... -
使用symbolicatecrash分析crash文件
2015-03-10 11:32 1124原文 http://www.cnblogs.com/ning ... -
程序设计中的计算复用(Computational Reuse)
2015-02-10 10:18 611从斐波那契数列说起 ... -
didReceiveMemoryWarning
2015-02-09 16:11 489IPhone下每个app可用的内存是被限制的,如果一个app使 ... -
iOS开发中怎么响应内存警告
2015-02-09 16:08 608好的应用应该在系统内存警告情况下释放一些可以重新创建的资源。在 ... -
ASIHTTPRequest多次重复请求的问题
2014-12-17 14:34 593在一个车票订购的项目中,点击一次订购,却生成了2次订单,通过抓 ... -
从 CloudKit 看 BaaS 服务的趋势
2014-09-26 11:51 693从 6 月份 WWDC 苹果发布 ... -
ios编程--AVCapture编程理解
2014-09-26 11:03 8750、媒体采集的几个东西。这里所需要明白的是,在这个流程中,这里 ... -
NSURLProtocol
2014-09-25 10:42 7621、http://nshipster.com/nsurlpro ... -
关于iOS8的extension插件
2014-09-25 10:41 1220关于iOS8的extension插件,有兴趣的同学可以参考一下 ... -
【转】ios app在itunesConnect里面的几种状态
2014-08-05 10:34 1094Waiting for Upload (Yellow) Ap ... -
[转]iOS Dev (45) iOS图标与切片处理工具Prepo
2014-02-07 17:02 991iOS Dev (45) iOS图标与切片处理工具Prepo ... -
phoneGap开发IOS,JS调用IOS方法/phoneGap插件开发
2014-01-13 17:49 1210前沿 废话不说phoneGap是什么不多介绍,官方网站: h ... -
如何在IOS平台下搭建PhoneGap开发环境(PhoneGap2.5)
2014-01-13 15:23 703由于在下最近在做基于HTML5的跨平台移植,搭建环境的时候着实 ... -
xcode 4 制作静态库详解
2013-12-20 18:27 487最近在做Apple的IOS开发,有开发静态库的需求,本身IOS ... -
【翻译】ios教程-创建静态库
2013-12-20 18:19 3016作者:shede333 主页:htt ... -
封装自己的控件库:iPhone静态库的应用
2013-12-20 17:03 516由于iPhone 控件的极度匮乏和自定义组件在重用上的限制,在 ... -
iphone:使用NSFileManager取得目录下所有文件(遍历所有文件)
2013-11-18 17:56 826From:http://note.sdo.com/u/xiao ...
相关推荐
App Architecture: iOS Application Design Patterns in Swift 包含Source code 有钱请支持正版 没钱请默默学习 原书地址: https://www.objc.io/books/app-architecture 中文原书地址: ...
ios开发介绍:IOS开发入门学习路线介绍ios开发介绍:IOS开发入门学习路线介绍ios开发介绍:IOS开发入门学习路线介绍ios开发介绍:IOS开发入门学习路线介绍ios开发介绍:IOS开发入门学习路线介绍
IOS开发小功能2:二维码扫描界面的设计(横线上下移动)
一个ios自带加解密方法的例子
局域网扫描 iOS局域网/ wifi扫描仪
ios微博项目视频教程:ios项目开发流程
IOS应用源码——斯坦福大学公开课:iOS程序开发教程(PPT+代码).zip
Intermediate iOS Programming with Swift: iOS 10 and Swift 3 by Simon Ng English | 21 Jun. 2017 | ASIN: B0733C5K1D | 790 Pages | AZW3 | 37.88 MB Learn by Doing It's not just about the theory or syntax...
iOS二维码信息、扫描二维码信息、信息二维码转换
CMDN CLUB#15期:iOS即时语音聊天技术实践
斯坦福大学公开课:IOS7应用开发课件PPT developing-ios-7-apps-for standford ios7
斯坦福大学公开课:IOS7应用开发课件PPT developing-ios-7-apps-for standford ios7
斯坦福大学公开课:iOS 7应用开发 本课程共18集 翻译完 欢迎学习 课程介绍 最新更新课程,适用于iOS7。本课程介绍了使用Xcode5建造iPhone平台上的应用程序所需的工具和应用程序接口;使用多点触控技术,为手机等终端...
斯坦福大学公开课:iOS 7应用开发 全套课件课后作业 加全套优化字幕 ,文件太大分两个压缩包,另一个见ios7 all_in_one_2,字幕可以直接加载,mac os 在mplayer里面可以直接切换字幕
网易公开课--斯坦福大学公开课:iOS 7应用开发-源码,源自网络
斯坦福大学公开课:iOS 7应用开发(中英文字幕)1-18全,字幕翻译相当精准。
斯坦福大学公开课:iOS 7应用开发 全套课件课后作业 加全套优化字幕 第二部分,文件太大分两个压缩包,另一个见ios7 all_in_one_1
iOS-OC-获取WiFi信息 http://blog.csdn.net/u014220518/article/details/51509692
实现iOS二维码扫描识别,并且带限制扫描区域及扫描动画的添加
App Architecture: iOS Application Design Patterns in Swift 中文版