CocoaAsyncSocket使用
代理的.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使用的更多相关文章
- IOS Socket 04-利用框架CocoaAsyncSocket实现客户端/服务器端
这篇文章,我们介绍CocoaAsyncSocket框架的使用,主要介绍实现客户端/服务器端代码,相信在网上已经很多这样的文章了,这里做一下自己的总结.这里介绍使用GCD方式 一.客户端 1.下载地址 ...
- iOS开发--浅谈CocoaAsyncSocket编程
Socket就是一种特殊的文件.它是一个连接了两个用户的文件,任何一个用户向Socket里写数据,另一个用户都能看得到,不管这两个用户分布在世界上相距多么遥远的角落,感觉就像坐在一起传纸条一样. 这么 ...
- [XMPP]简易的聊天室实现[二](使用CocoaAsyncSocket)
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- CocoaAsyncSocket框架的简单封装
在iOS开发中使用socket(CFNetwork),一般都是用第三方库AsyncSocket. 参考博客:http://my.oschina.net/worldligang/blog/396881? ...
- iOS Socket 整理以及CocoaAsyncSocket、SRWebSocket源码解析(一)
写在准备动手的时候: Socket通讯在iOS中也是很常见,自己最近也一直在学习Telegram这个开源项目,Telegram就是在Socket的基础上做的即时通讯,这个相信了解这个开源项目的也都知道 ...
- Socket学习总结系列(二) -- CocoaAsyncSocket
这是系列的第二篇 这是这个系列文章的第二篇,要是没有看第一篇的还是建议看看第一篇,以为这个是接着第一篇梳理的 先大概的总结一下在上篇的文章中说的些内容: 1. 整理了一下做IM我们有那些途径,以及我们 ...
- CocoaAsyncSocket UDP发送数据超过包大小限制(Message too long)
最近在做iOS上,基于UDP传输音视频时遇到的一个问题,这边纪录一下: 由于考虑实时性比较高,所以采用了 CocoaAsyncSocket 的UDP框架来实现,将视频切割成一帧帧的图片发给服务端,不过 ...
- iOS-----简易地CocoaAsyncSocket使用
CocoaAsyncSocket使用 代理的.h文件 //GCDAsyncSocketDelegate执行代理对象 #import <Foundation/Foundation.h> #i ...
- CocoaAsyncSocket 套接字
CocoaAsyncSocket 套接字 https://github.com/robbiehanson/CocoaAsyncSocket Asynchronous socket networki ...
- iOS:基于Socket的第三方框架CocoaAsyncSocket的使用
CocoaAsyncSocket无疑是目前封装得最完善的Socket库了:支持异步TCP/UDP,支持GCD,Objective-C接口封装,同时还有日志跟踪功能,使用此日志跟踪,程序员可以很方便的进 ...
随机推荐
- 性能测试工具LoadRunner26-LR之lr脚本插入DOS命令
基础命令 1.dir 无参数:查看当前所在目录的文件和文件夹 /s:查看当前目录其所有子目录的文件和文件夹 /a:查看包括隐含文件的所有文件 /ah:只显示隐含文件 /w:以紧凑方式显示文件和文件夹 ...
- (转)Linux系统排查4——网络篇
原文:http://www.cnblogs.com/Security-Darren/p/4700387.html 用于排查Linux系统的网络故障. 网络排查一般是有一定的思路和顺序的,其实排查的思路 ...
- (转)DNS原理及其解析过程
DNS原理及其解析过程原文:http://blog.51cto.com/369369/812889 网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能 ...
- 使用taobao的npm镜像源,同时安装nrm镜像工具
身在天朝.你面临的一个问题就是网络 安装好Nodejs 控制台 执行 npm config set registry https://registry.npm.taobao.org //配置指向源 然 ...
- Linux的cron服务
可以用以下命令启动和停止服务: /sbin/service crond start /sbin/service crond stop /sbin/service crond restart /sbin ...
- mongodb3集群搭建
三台服务器:先设置hosts 10.0.0.231 node1 10.0.0.232 node2 10.0.0.233 node3 1:下载 mongodb-linux-x86_64-rhel70-3 ...
- Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)
水平进度条,显示进度的文本随着进度而移动. 效果如下,截的静态图. 代码如下 TextProgressBar.java public class TextProgressBar extends Pro ...
- Ubuntu15.10下安装Docker
1.首先查看linux系统版本 head -n 1 /etc/issue 2.升级包管理器 sudo apt-get update sudo apt-get install apt-transport ...
- 数据库存储的数据(如果是<p>数据</p>或者<img src="" />等格式)(asp.net)
1.用方法@Html.Raw() @Html.Raw(数据库提取的数据放在这里)
- Kindeditor单独调用多图上传
html代码: <input type="button" id="J_selectImage" value="图片上传" />& ...