必赢亚洲手机app下载


怎样随时遍地

AI怎么样摧毁电商平台366net必赢亚洲手机版

使用SoftAP已毕与智能硬件的相互

首先要说一声对不起,今日在写完bonjour的时候理应努力把那篇也写好的,可是……渣渣向您丢来了一个dota2,你感到时光飞逝,dota2意义拔群。


呃,简而言之,先说一下SoftAP的概念呢。
依照百度驾驭的说法,SoftAP方式是一种通过有线网卡,使用专用软件在PC上完毕AP作用的技巧,它可以取代有线互联网中的AP(Access
Point,有线接入点),从而会回落有线组网的资本。约等于可以把载体作为有线接入点,让电脑、手机照旧其余上网设备的有线网连接到载体上,然后经过载体的网络(GPRS或许3G)上网。
浅显地以来,一个装置得以生出Wi-Fi信号,从而让其余手机啊电脑啊什么的连到它的Wi-Fi上去,达到局域网的功力,然后,利用局域网就足以一起……啊不,开发效益了。
366net必赢亚洲手机版,本身须求贯彻的意义也是跟上一篇一样,在将wifi账号密码交付给智能硬件的同时得到它的mac地址。
没错,同样的成效,两种落成方式。
在重重以互动为概念的小圈子中,那是老大首要的,终归,当你唯有一种办法落成目标时总会有用户因为种种原由此不可以如您想像的一样走在您陈设的中途,那么,在那一个时候,多一条路就是科学的化解办法。
那就是说,在DEMO以前您要求通晓两样东西,一是,让智能硬件如下图那样:

366net必赢亚洲手机版 1

wifi列表.png

让它的wifi信号呈现在四弟大的wifi列表中并不属于大家的局面中,那是硬件工程师的干活,所以,如果你们的智能硬件没有那样的效能就不要往下看了。
二是,大家需求一个socket,是的,不管是ios自带的socket仍然第三方的asyncsocket(半数以上情景下最好利用asyncsocket,它的代码观赏性总是比原生的更佳,更何况,什么人不希罕异步呢?)

假设是第五遍接触socket的校友也无需顾虑,前人插下的小树早已形成一片绿荫,无论是fuck
baidu依然fuck
google你都能在首先页找到你需求的齐全代码,细细研读半个钟头就能意会。

显而易见,你对asyncsocket的卷入代码后暴露头的必要有以下多少个部分

@interface BSSocketServe : NSObject
//一个连接成功后的block回调,当然,代理或者其他什么随便啦,你要用通知我都没意见。
@property(copy,nonatomic)void (^CallBackBlock)(BOOL Success);
//一个信息回调,这个需要与你们的硬件工程师协定,当硬件得到它想要的数据后返回给你什么,这里我得到的是mac地址。
@property(copy,nonatomic)void (^MessageBlock)(NSString *message);

//单例或者其他你认为更好的选择
+(instancetype)shareSocketServe;
//开始连接吧,切记在正确的环境下连接,不然你很可能得不到想要的结果。
-(void)startSocket;
//通常,我们需要切断连接的方法。
-(void)cutOffSocket;
//whatever
- (void)sendMessage:(id)message;
-(void)sendSSID:(NSString *)ssid AndPWD:(NSString *)pwd;
@end

然后它们的兑现是这么的

#import "BSSocketServe.h"
#import "AsyncSocket.h"

//你想要与之对话对象的ip地址以及它的端口号,在与硬件交流中通常是固定的,但你也可以从外界去取它。
#define HOST @"20.16.1.1"
#define PORT 21601
#define TIME_OUT 20

typedef enum {
    SocketOffLineByServe ,
    SocketOffLineByUser ,
    SocketOffLineByWiFiCut
}SocketOffLineBy;



@interface BSSocketServe ()<AsyncSocketDelegate>
@property(strong,nonatomic)AsyncSocket *socket;
@end
@implementation BSSocketServe


+(instancetype)shareSocketServe{
    static BSSocketServe * socket = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        socket = [[[self class] alloc]init];
    });
    return socket;
}
//开始连接
-(void)startSocket{
    self.socket = [[AsyncSocket alloc]initWithDelegate:self];
    [self.socket setRunLoopModes:[NSArray arrayWithObject:NSRunLoopCommonModes]];
    if (![self SocketOpen:HOST port:PORT]) {
    }
}
//切断连接
-(void)cutOffSocket{
    [self.socket disconnect];
}
-(NSInteger)SocketOpen:(NSString *)addr port:(NSInteger)port{
    if (![self.socket isConnected]) {
        NSError *error = nil;
        [self.socket connectToHost:addr onPort:port withTimeout:TIME_OUT error:&error];
    }
    return 0;
}
//asyncsocket的代理方法,当你成功连接时它会调用这个方法
-(void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{
 //    NSLog(@"成功连接");
    self.CallBackBlock(YES);
}
-(void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err{
    NSLog(@" willDisconnectWithError %ld   err = %@",sock.userData,[err description]);
    if (err.code == 57) {
        self.socket.userData = SocketOffLineByWiFiCut;
    }
}
-(void)onSocketDidDisconnect:(AsyncSocket *)sock{
    NSLog(@"7878 sorry the connect is failure %ld",sock.userData);
    if (sock.userData == SocketOffLineByUser) {
        // 服务器掉线,重连
        [self startSocket];
    }
    else if (sock.userData == SocketOffLineByUser) {

        // 如果由用户断开,不进行重连
        return;
    }else if (sock.userData == SocketOffLineByWiFiCut) {

        // wifi断开,不进行重连
        return;
    }   
}
   //向服务器发送数据
-(void)sendMessage:(id)message
{
    if ([message isKindOfClass:[NSString class]]) {
        NSData *cmdData = [message dataUsingEncoding:NSASCIIStringEncoding];
        [self.socket writeData:cmdData withTimeout:-1 tag:1];
    }else{
        [self.socket writeData:message withTimeout:-1 tag:1];
    }
}
//对ssid以及pwd再包装后发送信息
-(void)sendSSID:(NSString *)ssid AndPWD:(NSString *)pwd{
    //对数据的再处理自行决定,请不要忘记调用上方的sendMessage
}

//发送消息成功之后回调
- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag
{
    //读取消息
    [self.socket readDataWithTimeout:-1 buffer:nil bufferOffset:0 maxLength:1024 tag:0];
}

//接受消息成功之后回调
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
    NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    self.MessageBlock(str);
}

@end

好了,准备工作甘休了,我的工作也就基本上已毕了,接下去只须要

//你总是可以将它简化成三目运算符
         if "你处于硬件为你提供的wifi网络中时"{
                BSSocketServe.shareSocketServe().startSocket()
            }else{
                "提示用户选择硬件的wifi网络"
            }

//如果连接成功,向硬件发送它想知道的东西
            BSSocketServe.shareSocketServe().CallBackBlock = { (Success:Bool) ->() in
                if Success{
                    BSSocketServe.shareSocketServe().sendSSID(ssid, andPWD: pwd)
                }else{
                    print("连接失败")
                }
            }

//在信息回调里处理你得到的信息
            BSSocketServe.shareSocketServe().MessageBlock = {[weak self] (message) in
               self?.MAC = self?.getMacAdress(message)
                BSSocketServe.shareSocketServe().cutOffSocket()
            }

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图