必赢亚洲手机app下载


366net必赢亚洲手机版沐浴思维:如何随时随地,进入最佳工作状态

必赢亚洲手机app十分陪我一同吃苦的女孩结婚了

iOS-使用SoftAP完成及智能硬件的彼此

先是要说一样声对不起,昨天于描绘了bonjour的早晚应该努力把这首也刻画好之,但是……渣渣向而扔来了一个dota2,你感到上飞逝,dota2职能拔群。


呃,总而言之,先说一下SoftAP的定义吧。
基于百度知道的说法,SoftAP模式是千篇一律种植通过无线网卡,使用专用软件在PC上贯彻AP功能的技巧,它可替代无线网络中的AP(Access
Point,无线接入点),从而会稳中有降无线组网的资产。也就是是可以管载体作为无线接入点,让电脑、手机要其它上网设备的无线网连接到载体上,然后经载体的网络(GPRS或者3G)上网。
浅尝辄止显地吧,一个配备得以生出Wi-Fi信号,从而让另外手机啊电脑什么什么的连到它的Wi-Fi上去,达到局域网的效力,然后,利用局域网就足以协同……啊不,开发成效了。
自己需要实现的效应也是和达到同样篇一样,在拿wifi账号密码交付于智能硬件的又获得其的mac地址。
没错,同样的效用,两种植实现方式。
以诸多以互为概念的园地中,这是异常关键之,毕竟,当你不过生同等种方法及目的时总会发出用户因各种原因一旦无办法要您想像的同一走以您计划的中途,那么,在这时,多一致修总长就是没错的解决办法。
那么,在DEMO之前你待了解有限样东西,一是,让智能硬件如下图这样:

图片 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地图