国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

iOS-----簡(jiǎn)易地CocoaAsyncSocket使用

2019-11-14 17:54:41
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

CocoaAsyncSocket使用

代理的.h文件

復(fù)制代碼
//GCDAsyncSocketDelegate執(zhí)行代理對(duì)象#import <Foundation/Foundation.h>#import "CocoaAsyncSocket.h"typedef void(^DidReadData)(NSDictionary* didReadData);/** *  GCDAsyncSocketDelegate執(zhí)行代理對(duì)象 */@interface NSObjectGCDAsyncSocket : NSObject<GCDAsyncSocketDelegate>/** *  接收到數(shù)據(jù)的處理 */@PRoperty(nonatomic,copy)DidReadData didReadData;/** *  發(fā)送的數(shù)據(jù)  如果添加新鍵值則需要先開(kāi)辟內(nèi)存 */@property(nonatomic,retain)NSMutableDictionary* writeData;/** *  發(fā)送鏈接請(qǐng)求 */-(BOOL)startConnect;/** *  單例 */+(NSObjectGCDAsyncSocket*)defaultSocket;@end
復(fù)制代碼

.m文件

復(fù)制代碼
////  NSObjectGCDAsyncSocket.m//  attendance#import "NSObjectGCDAsyncSocket.h"@implementation NSObjectGCDAsyncSocket{    GCDAsyncSocket* socket;}/** *  單例 * *  @return */+(NSObjectGCDAsyncSocket *)defaultSocket{    // socket只會(huì)實(shí)例化一次    static NSObjectGCDAsyncSocket* socket=nil;    // 保證線程安全,defaultSocket只執(zhí)行一次    static dispatch_once_t once;    dispatch_once(&once, ^    {        socket=[[NSObjectGCDAsyncSocket alloc] init];    });    return socket;}/** *  初始化 * * *  @return self */-(instancetype)init{    self=[super init];    if (self)    {        socket=[[GCDAsyncSocket alloc] initWithDelegate:self                                          delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];    }    return self;}/** *  發(fā)送鏈接請(qǐng)求 */-(BOOL)startConnect{    // 先確定斷開(kāi)連接再開(kāi)始鏈接    if (socket.isConnected)    {        NSLog(@"主動(dòng)斷開(kāi)");        [socket disconnect];            }    NSError* error;    BOOL  isSuccess= [socket connectToHost:SocketHost                                    onPort:SocketPort                                     error:&error];    if (error)    {        NSLog(@"error.localizedDescrGCDAsyncSocketDelegate/** *  鏈接成功 * *  @param sock sock實(shí)例 *  @param host IP *  @param port 端口 */-(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host         port:(uint16_t)port{    //    NSLog(@"%s",__FUNCTION__);//    NSLog(sock.isConnected?@"YES":@"NO");//    if (sock.isConnected)//    { // NSString上傳需要加"/n"分隔符方可上傳成功/* [sock writeData:[@"ABCABCABCABCABCABC/n" dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0]; *//* NSDictionary* nsDictionaryUser=@{@"gpsinfo":@"Gpsinfo", @"pswd":self.passWord, @"gpstype":@(2015), @"name":self.name, };        NSDictionary* agrement=@{@"vertion":@(1),                                 @"type1":@(2),                                 @"type2":@(0),                                 @"type3":@(0)};*/        if ([NSJSONSerialization isValidJSONObject:self.writeData])        {//            NSLog(@"isValidJSONObject");            NSError* error;            // 先轉(zhuǎn)NSData再轉(zhuǎn)NSString是為了保證NSDictionary格式不變            NSData *nsDataUser= [NSJSONSerialization dataWithJSONObject:self.writeData                                                                options:NSJSONWritingPrettyPrinted                                                                  error:&error];            NSString* json=[[NSString alloc] initWithData:nsDataUser                                                 encoding:NSUTF8StringEncoding];//            NSLog(@"nsDictionaryUser:%@",json);                        json=[json stringByReplacingOccurrencesOfString:@"/n"                                                 withString:@""];            json=[json stringByReplacingOccurrencesOfString:@" "                                                 withString:@""];            json=[json stringByAppendingString:@"/n"];//            NSLog(@"json:%@",json);                        [sock writeData:[json dataUsingEncoding:NSUTF8StringEncoding]                withTimeout:-1                        tag:0];                        // 保持讀取的長(zhǎng)連接            [sock readDataWithTimeout:-1                                  tag:0];                        if (error)            {                NSLog(@"localizedDescription:%@",[error localizedDescription]);                NSLog(@"localizedFailureReason:%@",[error localizedFailureReason]);            }                    }//    } }/** *  發(fā)送數(shù)據(jù)成功 * *  @param sock  sock實(shí)例 *  @param tag  標(biāo)記sock */-(void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag{//    NSLog(@"didWriteDataWithTag");}/** *  已經(jīng)獲取到數(shù)據(jù) * *  @param sock sock實(shí)例 *  @param data 獲取到的數(shù)據(jù) *  @param tag  標(biāo)記sock */-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data      withTag:(long)tag{    //    NSLog(@"%s",__FUNCTION__);    NSError* error=nil;    NSDictionary* json=(NSDictionary*)[NSJSONSerialization JSONObjectWithData:data                                                       options:NSJSONReadingAllowFragments                                                         error:&error];        NSLog([NSJSONSerialization isValidJSONObject:json]?@"is ValidJSONObject":@"is't ValidJSONObject");    if (error)    {        NSLog(@"socketError1:%@",[error localizedDescription]);         NSLog(@"socketError2:%@",[error localizedFailureReason]);    }    self.didReadData(json);    [sock disconnect];    }/** *  鏈接出錯(cuò) * *  @param sock sock實(shí)例 *  @param err  錯(cuò)誤參數(shù) */-(void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err{//    NSLog(@"%s",__FUNCTION__);        if (err)    {        NSLog(@"socketDidDisconnect:%@",[err localizedDescription]);        NSLog(@"socketDidDisconnect:%@",[err localizedFailureReason]);    }//    self.didReadData(nil);}@end
復(fù)制代碼

使用

創(chuàng)建對(duì)象    socket=[NSObjectGCDAsyncSocket defaultSocket];填寫(xiě)發(fā)送的數(shù)據(jù)socket.writeData=[NSMutableDictionary dictionaryWithDictionary:dictionary];處理收到的數(shù)據(jù)        socket.didReadData=^(NSDictionary* didReadData){.......}開(kāi)始鏈接[socket startConnect];添加CocoaAsyncSocket 第三庫(kù) 鏈接地址:https://github.com/robbiehanson/CocoaAsyncSocket
轉(zhuǎn)載自螻蟻之毒

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 东兰县| 台湾省| 鄄城县| 尼勒克县| 清河县| 灌阳县| 洛阳市| 广西| 谷城县| 株洲市| 沾化县| 藁城市| 闽侯县| 濮阳县| 汤原县| 卫辉市| 新巴尔虎右旗| 闵行区| 阿图什市| 白朗县| 阳原县| 甘泉县| 始兴县| 三明市| 楚雄市| 康平县| 蚌埠市| 正宁县| 长丰县| 永康市| 芜湖市| 大安市| 泗阳县| 皮山县| 泸水县| 岳阳市| 永胜县| 乐陵市| 龙岩市| 奉新县| 安乡县|