代理的.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. ubuntu 16.04下搜狗输入法不能输入中文解决

    之前一段时间正常使用的搜狗输入法突然无法输出中文(具体现象是,可以呼出搜狗输入法界面,但是候选词列表无显示),解决之后记录下来,希望能为同样遇到这个问题的人提供参考.同时附linux下常见软件崩溃问题 ...

  2. hystrix应用介绍(二)

    上篇博客中讲了hystrix在公司中的一些应用场景,由于保密的原因没办法贴出优化的代码,这里专门写一篇hystrix代码的demo,供大家在使用的过程中快速上手 Hystrix有两个请求命令 Hyst ...

  3. git合并分支上的commit为一条commit到master

    标签: git 缘由? 有一次被人问到怎么把一个分支的所有commit按一个commit合并到主分支上,当时一脸蒙B,平时开发都是直接merge,很少考虑到这种问题,于是特意搜索了相关资料. 场景 其 ...

  4. DirectX HLSL 内置函数

    Intrinsic Functions (DirectX HLSL) The following table lists the intrinsic functions available in HL ...

  5. 《ArcGIS Runtime SDK for Android开发笔记》——(2)、Android Studio基本配置与使用

    1.前言 在上一篇文章<Android Studio下载与安装>里我们已经介绍了Android Studio的下载与安装步骤,这一篇我们将针对Android Studio的基本常见使用做一 ...

  6. (转)两张Firefox OS 系统截图

    锁屏图 锁屏就是一个向上的小火箭. 桌面 桌面又是另一种风格. 注意 以上为Android系统下运行b2g. 原文地址,TZone

  7. 最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——C语言描述第二章习题2.12第二问)

    #include "stdio.h" #include "stdlib.h" #define random(x) (rand()%x) void creat_a ...

  8. php的yii框架开发总结9

    这一篇讲解怎么实现的自动发邮件的功能,我在网上查了很多资料,很多都是用定时检测来实现的,我试过,效率太低,网站也卡了. 后来就写了一个.bat文件来实现刷新页面,用了windows的定时任务定时来运行 ...

  9. April 20 2017 Week 16 Thursday

    We are all in the gutter, but some of us are looking at the stars. 我们都生活在阴沟里,但仍有人仰望星空. In the past m ...

  10. 859. Buddy Strings (wrong 4 times so many cases to test and consider) if else**

    Given two strings A and B of lowercase letters, return true if and only if we can swap two letters i ...