CocoaAsyncSocket使用

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

代理的.h文件

//GCDAsyncSocketDelegate执行代理对象#import<Foundation/Foundation.h>#import"CocoaAsyncSocket.h"#import"Public.h"typedefvoid(^DidReadData)(NSDictionary*didReadData);/**

* GCDAsyncSocketDelegate执行代理对象*/@interface NSObjectGCDAsyncSocket : NSObject<GCDAsyncSocketDelegate>/**

* 接收到数据的处理*/@PRoperty(nonatomic,copy)DidReadData didReadData;/**

* 发送的数据 如果添加新键值则需要先开辟内存*/@property(nonatomic,retain)NSMutableDictionary*writeData;/**

* 发送链接请求*/-(BOOL)startConnect;/**

* 单例*/+(NSObjectGCDAsyncSocket*)defaultSocket;

@end

.m文件

////NSObjectGCDAsyncSocket.m//attendance////Created by dgc on 15/7/7.//Copyright (c) 2015年 dgc. All rights reserved.//#import"NSObjectGCDAsyncSocket.h"@implementation NSObjectGCDAsyncSocket

{

GCDAsyncSocket*socket;

}/**

* 单例

*

* @return*/+(NSObjectGCDAsyncSocket *)defaultSocket

{//socket只会实例化一次staticNSObjectGCDAsyncSocket* socket=nil;//保证线程安全,defaultSocket只执行一次staticdispatch_once_t once;

dispatch_once(&once, ^{

socket=[[NSObjectGCDAsyncSocket alloc] init];

});returnsocket;

}/**

* 初始化

*

*

* @return self*/-(instancetype)init

{

self=[super init];if(self)

{

socket=[[GCDAsyncSocket alloc] initWithDelegate:self

delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)];

}returnself;

}/**

* 发送链接请求*/-(BOOL)startConnect

{//先确定断开连接再开始链接if(socket.isConnected)

{

NSLog(@"主动断开");

[socket disconnect];

}

NSError*error;

BOOL isSuccess=[socket connectToHost:SocketHost

onPort:SocketPort

error:&error];if(error)

{

NSLog(@"error.localizedDescription:%@",error.localizedDescription);

}returnisSuccess;

}#pragmamark - GCDAsyncSocketDelegate/**

* 链接成功

*

* @param sock sock实例

* @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;//先转nsdata再转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:-1tag:0];//保持读取的长连接[sock readDataWithTimeout:-1tag:0];if(error)

{

NSLog(@"localizedDescription:%@",[error localizedDescription]);

NSLog(@"localizedFailureReason:%@",[error localizedFailureReason]);

}

}//}}/**

* 发送数据成功

*

* @param sock sock实例

* @param tag 标记sock*/-(void)socket:(GCDAsyncSocket *)sock

didWriteDataWithTag:(long)tag

{//NSLog(@"didWriteDataWithTag");}/**

* 已经获取到数据

*

* @param sock sock实例

* @param data 获取到的数据

* @param tag 标记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];

}/**

* 链接出错

*

* @param sock sock实例

* @param err 错误参数*/-(void)socketDidDisconnect:(GCDAsyncSocket *)sock

withError:(NSError*)err

{//NSLog(@"%s",__FUNCTION__);if(err)

{

NSLog(@"socketDidDisconnect:%@",[err localizedDescription]);

NSLog(@"socketDidDisconnect:%@",[err localizedFailureReason]);

}//self.didReadData(nil);}

@end

使用

创建对象

socket=[NSObjectGCDAsyncSocket defaultSocket];

填写发送的数据

socket.writeData=[NSMutableDictionary dictionaryWithDictionary:dictionary];

处理收到的数据

socket.didReadData=^(NSDictionary*didReadData){.......}开始链接

[socket startConnect];

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航