iOS:基于Socket的第三方框架CocoaAsyncSocket的使用
CocoaAsyncSocket无疑是目前封装得最完善的Socket库了:支持异步TCP/UDP,支持GCD,Objective-C接口封装,同时还有日志跟踪功能,使用此日志跟踪,程序员可以很方便的进行调试。
文件如下:


如果想打开日志调试,很简单,导入需要的DDASLLogger.h头文件,创建DDASLLogger单利对象就可以了。

简单的演示如下:
1.在故事版布局

2.在ViewController.h文件中
// ViewController.h
// AysnSocket #import <UIKit/UIKit.h>
#import "AsyncSocket.h" @interface ViewController : UIViewController
{
NSMutableArray *_scokets; //存放客户端的可变数组
AsyncSocket *_sendSocket; //发送端
AsyncSocket *_receScoket; //接收端
}
@end
3.在ViewController.m文件中
// ViewController.m
// AysnSocket #import "ViewController.h"
#import "AsyncSocket.h" @interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextView *msgView;
@property (weak, nonatomic) IBOutlet UITextField *ipField;
@property (weak, nonatomic) IBOutlet UITextField *sendField;
- (IBAction)coneClicked:(UIButton *)sender; //连接服务器
- (IBAction)sendClicked:(UIButton *)sender; //发送端发送消息
- (IBAction)disConeClicked:(UIButton *)sender; //断开连接
@end @implementation ViewController
@synthesize msgView;
@synthesize ipField;
@synthesize sendField; - (void)viewDidLoad {
[super viewDidLoad]; //1.初始化scokets数组,存储新的客户端scoket
_scokets = [NSMutableArray array]; //2.实例化发送端和接收端
_sendSocket = [[AsyncSocket alloc]initWithDelegate:self];
_receScoket = [[AsyncSocket alloc]initWithDelegate:self]; //3.接收端开始监听网络
NSError *error;
[_receScoket acceptOnPort: error:&error];
} #pragma mark - 代理方法
//接受到新的scoket
- (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket
{
//将新接收到的socket加入数组中
[_scokets addObject:newSocket]; //开始接受数据
[newSocket readDataWithTimeout:- tag:];
} //接收端收到信息
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
//接收数据
NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; //格式化数据
self.msgView.text = [NSString stringWithFormat:@"%@,%@,%@",self.msgView.text,self.ipField.text,string]; //循环读取
[sock readDataWithTimeout:- tag:];
} //连接服务器成功
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
{
NSLog(@"%@",host);
NSLog(@"连接服务器成功");
} //断开服务器成功
-(void)onSocketDidDisconnect:(AsyncSocket *)sock
{
NSLog(@"断开连接成功");
} #pragma mark - 按钮事件
//建立连接
- (IBAction)coneClicked:(UIButton *)sender { if (_sendSocket.isConnected)
{
[_sendSocket disconnect];
} //客户端重新连接到主机
[_sendSocket connectToHost:self.ipField.text onPort: withTimeout: error:nil];
} //发送消息
- (IBAction)sendClicked:(UIButton *)sender { //客户端发送数据
NSData *data = [self.sendField.text dataUsingEncoding:NSUTF8StringEncoding];
[_sendSocket writeData:data withTimeout: tag:]; //清空数据
self.sendField.text = @"";
} //断开服务器
- (IBAction)disConeClicked:(UIButton *)sender
{
if (_sendSocket.isConnected)
{
[_sendSocket disconnect];
}
}
@end
测试如下:
(1)打开电脑的网络设置,看一下ip和设置端口为8888

(2)运行程序,在演示中输入ip和消息
一开始: 输入ip和消息,然后连接服务器

连接成功服务器成功 发送消息,数据发送成功

断开服务器:

断开服务器后,再尝试发送数据,是无法发送并显示在UITextView上的。
iOS:基于Socket的第三方框架CocoaAsyncSocket的使用的更多相关文章
- iOS开发之常用第三方框架(下载地址,使用方法,总结)
iOS开发之常用第三方框架(下载地址,使用方法,总结) 说句实话,自学了这么久iOS,如果说我不知道的但是又基本上都摸遍了iOS相关知识,但是每次做项目的时候,遇到难一点的地方或者没试过的东西就闷了. ...
- iOS开发常用的第三方框架
1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是G ...
- iOS:网络编程的第三方框架:AFNetworking、SDWebImage
网络编程第三方框架:AFNetworking.SDWebImage 介绍:这些框架是开源的,经过前人的封装.改进,成为使用次数很多的一个性能好的源代码框架,只需要将它导入项目中,就可以使用.因此,在做 ...
- IOS Socket 04-利用框架CocoaAsyncSocket实现客户端/服务器端
这篇文章,我们介绍CocoaAsyncSocket框架的使用,主要介绍实现客户端/服务器端代码,相信在网上已经很多这样的文章了,这里做一下自己的总结.这里介绍使用GCD方式 一.客户端 1.下载地址 ...
- IOS一些高效的第三方框架库
MBProgressHUD ——进展指示符库 苹果的应用程序一般都会用一种优雅的,半透明的进度显示效果,不过这个API是不公开的,因此你要是用了,很可能被清除出AppStore.而 MBProgres ...
- 提高iOS开发效率的第三方框架等--不断更新中。。。
1. Mantle Mantle 让我们能简化 Cocoa 和 Cocoa Touch 应用的 model 层.简单点说,程序中经常要进行网络请求,请求到得一般是 json 字符串,我们一般会建一个 ...
- iOS 基于Socket 的 C/S 网络通信结构(下一个)
以前实现简单 Server 程序,服务端通过 void WriteStreamClientCallBack(CFWriteStreamRef stream, CFStreamEventType eve ...
- IOS 极光推送(第三方框架)
下载极光推送文件,将以下两个文件导入项目中 APService.h libpushSDK.a #import "HMAppDelegate.h" #import "APS ...
- 提高iOS开发效率的第三方框架等
http://zhangmingwei.iteye.com/blog/2208783 http://www.kuqin.com/shuoit/20150703/346900.html
随机推荐
- 高德地图web 端智能围栏
最近有个项目,需要在web上批量给设备设置智能围栏,设备超出范围报警,查看高德地图webJS API,web端操作案例如,后台判断没有提供源码 <!-- 重点参数:iconStyle --> ...
- 讲IOC非常好的一篇文章--初步弄懂DI
http://jinnianshilongnian.iteye.com/blog/1413846 http://jinnianshilongnian.iteye.com/blog/pdf 之后又看了类 ...
- centos系统服务管理
系统服务管理工具: chkconfig(所有linux发行版都有),用法很简单,如下: usage: chkconfig --list [name] chkconfig --ad ...
- UVA 548.Tree-fgets()函数读入字符串+二叉树(中序+后序遍历还原二叉树)+DFS or BFS(二叉树路径最小值并且相同路径值叶子节点权值最小)
Tree UVA - 548 题意就是多次读入两个序列,第一个是中序遍历的,第二个是后序遍历的.还原二叉树,然后从根节点走到叶子节点,找路径权值和最小的,如果有相同权值的就找叶子节点权值最小的. 最后 ...
- POJ 1258 + POJ 1287 【最小生成树裸题/矩阵建图】
Farmer John has been elected mayor of his town! One of his campaign promises was to bring internet c ...
- oracle常用函数整理
oracle常用函数整理 1.绝对值.取余.判断数值正负函数 绝对值:ABS(n) 示例: SELECT ABS(100),ABS(-100),ABS('100') FROM ...
- java原理—反射机制
http://www.cnblogs.com/forlina/archive/2011/06/21/2085849.html 一.什么是反射:反射的概念是由Smith在1982年首次提出的,主要是指程 ...
- 【前端必备】二、CSS篇
1.CSS盒模型 当对一个文档进行布局的时候,浏览器的渲染引擎会根据盒模型将所有元素表示为一个个矩形的盒子,CSS 决定这些盒子的大小.位置以及属性(例如颜色.背景.边框尺寸-) 每个盒子有4个区域: ...
- go chapter 2 - read file(yaml)
func main() { data, err := ioutil.ReadFile("D:/test/widua.go") if err != nil { fmt.Println ...
- Python开发基础-Day16import模块导入和包的调用
模块概念 在Python中,一个.py文件就称之为一个模块(Module).使用模块组织代码,最大的好处是大大提高了代码的可维护性 模块一共三种:python标准库.第三方模块.应用程序自定义模块. ...