代理的.h文件

#import <Foundation/Foundation.h>
#import "GCDAsyncSocket.h"
typedef void(^SR_DidReadData)(NSDictionary* didReadData);
/*
*/
@interface SocketRequest : NSObject<GCDAsyncSocketDelegate>
@property(nonatomic,copy)SR_DidReadData sr_DidReadData;
@property(nonatomic,retain)NSDictionary* sr_WriteData;
/**
* 单例
*/
+(SocketRequest*)defaultSocket;
/**
* 发送链接请求
*/
-(void)sr_StartConnect_WriteData:(NSDictionary*)writeData
ReviceData:(SR_DidReadData)reviceData;

.m文件

#import "SocketRequest.h"
#import "Public.h"
NSString* BoolValue(BOOL value)
{
if (value)
{
return @"YES";
}
return @"NO";
}
@implementation SocketRequest
{
GCDAsyncSocket* socket;
}
/**
* 单例
*/
+(SocketRequest *)defaultSocket
{
//socket只会实例化一次
static SocketRequest* socket=nil;
//保证线程安全,defaultSocket只执行一次
static dispatch_once_t once;
dispatch_once(&once, ^
{
socket=[[SocketRequest alloc] init];
});
return socket;
}
/**
* 初始化
*/
-(instancetype)init
{
self=[super init];
if (self)
{
socket=[[GCDAsyncSocket alloc] initWithDelegate:self
delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, )];
}
return self;
}
/**
* 发送链接请求
*/
-(void)sr_StartConnect_WriteData:(NSDictionary*)writeData
ReviceData:(SR_DidReadData)reviceData
{
//先确定断开连接再开始链接
FunctionLog(@"%@",BoolValue(socket.isConnected));
if (socket.isConnected)
{
[socket disconnect];
}
self.sr_WriteData=writeData;
self.sr_DidReadData = reviceData;
NSError* error;
/*
判断不准(目标地址未开判断为YES)
*/
[socket connectToHost:SocketHost
onPort:SocketPort
error:&error];
if (!socket.isConnected)
{
if (self.sr_DidReadData)
{
self.sr_DidReadData(nil);
}
}
}
#pragma mark - <GCDAsyncSocketDelegate>
/**
* 发送数据成功
*/
-(void)socket:(GCDAsyncSocket *)sock
didWriteDataWithTag:(long)tag
{
FunctionLog(@"socket_Success");
}
/**
* 已经获取到数据
*/
-(void)socket:(GCDAsyncSocket *)sock
didReadData:(NSData *)data
withTag:(long)tag
{
NSError* error=nil;
id json=[NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingAllowFragments
error:&error];
if (error)
{
FunctionLog(@"%@",error.localizedDescription);
}
else
{
if ([NSJSONSerialization isValidJSONObject:json])
{
FunctionLog(@"%@",json);
if (self.sr_DidReadData)
{
self.sr_DidReadData(json);
}
}
}
[sock disconnect];
}
/**
* 链接出错
*/
-(void)socketDidDisconnect:(GCDAsyncSocket *)sock
withError:(NSError *)err
{
if (err)
{
FunctionLog(@"%@",err.localizedDescription);
if (self.sr_DidReadData)
{
self.sr_DidReadData(nil);
}
}
}
/**
* 链接成功
*/
-(void)socket:(GCDAsyncSocket *)sock
didConnectToHost:(NSString *)host
port:(uint16_t)port
{
if ([NSJSONSerialization isValidJSONObject:self.sr_WriteData])
{
NSError* error;
//先转nsdata再转nsstring是为了保证nsdictionary格式不变
NSData *nsDataUser= [NSJSONSerialization dataWithJSONObject:self.sr_WriteData
options:NSJSONWritingPrettyPrinted
error:&error];
NSString* json=[[NSString alloc] initWithData:nsDataUser
encoding:NSUTF8StringEncoding];
json=[json stringByReplacingOccurrencesOfString:@"\n"
withString:@""];
json=[json stringByReplacingOccurrencesOfString:@" "
withString:@""];
json=[json stringByAppendingString:@"\n"];
/*
数据发送
*/
[sock writeData:[json dataUsingEncoding:NSUTF8StringEncoding]
withTimeout:
tag:];
/*
数据读取
*/
[sock readDataWithTimeout:
tag:];
if (error)
{
FunctionLog(@"%@",error.localizedDescription);
}
}
}
@end
 //nsstring上传需要加"\n"分隔符方可上传成功
/*
[sock writeData:[@"ABCABCABCABCABCABC\n" dataUsingEncoding:NSUTF8StringEncoding]
withTimeout:-1
tag:0];
*/

使用


[[SocketRequest defaultSocket] sr_StartConnect_WriteData:@{}
ReviceData:^(NSDictionary *didReadData)
{}];

CocoaAsyncSocket使用的更多相关文章

  1. IOS Socket 04-利用框架CocoaAsyncSocket实现客户端/服务器端

    这篇文章,我们介绍CocoaAsyncSocket框架的使用,主要介绍实现客户端/服务器端代码,相信在网上已经很多这样的文章了,这里做一下自己的总结.这里介绍使用GCD方式 一.客户端 1.下载地址 ...

  2. iOS开发--浅谈CocoaAsyncSocket编程

    Socket就是一种特殊的文件.它是一个连接了两个用户的文件,任何一个用户向Socket里写数据,另一个用户都能看得到,不管这两个用户分布在世界上相距多么遥远的角落,感觉就像坐在一起传纸条一样. 这么 ...

  3. [XMPP]简易的聊天室实现[二](使用CocoaAsyncSocket)

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  4. CocoaAsyncSocket框架的简单封装

    在iOS开发中使用socket(CFNetwork),一般都是用第三方库AsyncSocket. 参考博客:http://my.oschina.net/worldligang/blog/396881? ...

  5. iOS Socket 整理以及CocoaAsyncSocket、SRWebSocket源码解析(一)

    写在准备动手的时候: Socket通讯在iOS中也是很常见,自己最近也一直在学习Telegram这个开源项目,Telegram就是在Socket的基础上做的即时通讯,这个相信了解这个开源项目的也都知道 ...

  6. Socket学习总结系列(二) -- CocoaAsyncSocket

    这是系列的第二篇 这是这个系列文章的第二篇,要是没有看第一篇的还是建议看看第一篇,以为这个是接着第一篇梳理的 先大概的总结一下在上篇的文章中说的些内容: 1. 整理了一下做IM我们有那些途径,以及我们 ...

  7. CocoaAsyncSocket UDP发送数据超过包大小限制(Message too long)

    最近在做iOS上,基于UDP传输音视频时遇到的一个问题,这边纪录一下: 由于考虑实时性比较高,所以采用了 CocoaAsyncSocket 的UDP框架来实现,将视频切割成一帧帧的图片发给服务端,不过 ...

  8. iOS-----简易地CocoaAsyncSocket使用

    CocoaAsyncSocket使用 代理的.h文件 //GCDAsyncSocketDelegate执行代理对象 #import <Foundation/Foundation.h> #i ...

  9. CocoaAsyncSocket 套接字

    CocoaAsyncSocket   套接字 https://github.com/robbiehanson/CocoaAsyncSocket Asynchronous socket networki ...

  10. iOS:基于Socket的第三方框架CocoaAsyncSocket的使用

    CocoaAsyncSocket无疑是目前封装得最完善的Socket库了:支持异步TCP/UDP,支持GCD,Objective-C接口封装,同时还有日志跟踪功能,使用此日志跟踪,程序员可以很方便的进 ...

随机推荐

  1. C# 进一取整

    C#: // "/"号现在整形运算是取整,浮点运算时为除法运算 Console.WriteLine("(56/10):{0}", 56 / 10);//5 Co ...

  2. 性能测试工具Jmeter07-Jmeter性能测试实战

    测试需求:测试20个用户访问www.baozhenart.com在负载达到30QPS时的平均响应时间 QPS:Query Per Second每秒查询率.是一台查询服务器每秒能够处理的查询次数.在因特 ...

  3. BP人工神经网络-反向传播法

    0 网络计算结果 B(m)=f( ∑n( W(n,m)*X(n) ) + Θ(m) ) %中间层的输出 Y(k)=f( ∑m( V(m,k)*B(m) ) + ф(k) ) %输出层的输出 1 计算误 ...

  4. Murano py27和py34的兼容处理

    tox.ini envlist = py27,py34,pep8 1. django.utils.encoding.force_unicode替换成django.utils.encoding.forc ...

  5. 用Jmeter 测试接口--需要登录怎么办?

    一.试用场景---当你测试的接口 需要登录,然后 你又不知道怎么让这测这个接口前登录?这篇文章写得是 用静态的Token 值,来测试需要登录的接口 二.步骤 1  首相用Jmeter   将要测试的接 ...

  6. PS基础,数学,语文

    PS基础(修图) 污点修复画笔工具---设置画笔大小---设置类型(内容识别)---修改图片---完成. 修复画笔工具---设置画笔大小---设置源(取样)---修改图片---完成. 修补工具---设 ...

  7. Hibernate课程 初探多对多映射1-1 多对多应用场景

    1 用途: 员工和项目之间的多对多关系 2 实现: 员工表和项目表之外,建立员工和项目关联表来实现: 3 hibernate应用: set元素和many-to-many来实现

  8. springmvc+spring+mybatis+sqlserver----插入一条新数据

    <insert id="addOneMsg" parameterType="java.util.Map"> INSERT INTO PDA_JWL_ ...

  9. 冒泡排序,冒泡性能优化--java实现

    冒泡排序说明: 一次比较两个元素,如果他们的顺序错误就把他们交换过来. 重复地进行直到没有再需要交换,也就是说已经排序完成. 越小的元素会经由交换慢慢“浮”到数列的顶端. 冒泡排序算法的运作如下: 比 ...

  10. css多行文本溢出显示省略号

    HTML: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <met ...