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的使用的更多相关文章

  1. iOS开发之常用第三方框架(下载地址,使用方法,总结)

    iOS开发之常用第三方框架(下载地址,使用方法,总结) 说句实话,自学了这么久iOS,如果说我不知道的但是又基本上都摸遍了iOS相关知识,但是每次做项目的时候,遇到难一点的地方或者没试过的东西就闷了. ...

  2. iOS开发常用的第三方框架

    1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是G ...

  3. iOS:网络编程的第三方框架:AFNetworking、SDWebImage

    网络编程第三方框架:AFNetworking.SDWebImage 介绍:这些框架是开源的,经过前人的封装.改进,成为使用次数很多的一个性能好的源代码框架,只需要将它导入项目中,就可以使用.因此,在做 ...

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

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

  5. IOS一些高效的第三方框架库

    MBProgressHUD ——进展指示符库 苹果的应用程序一般都会用一种优雅的,半透明的进度显示效果,不过这个API是不公开的,因此你要是用了,很可能被清除出AppStore.而 MBProgres ...

  6. 提高iOS开发效率的第三方框架等--不断更新中。。。

    1. Mantle Mantle 让我们能简化 Cocoa 和 Cocoa Touch 应用的 model 层.简单点说,程序中经常要进行网络请求,请求到得一般是 json 字符串,我们一般会建一个 ...

  7. iOS 基于Socket 的 C/S 网络通信结构(下一个)

    以前实现简单 Server 程序,服务端通过 void WriteStreamClientCallBack(CFWriteStreamRef stream, CFStreamEventType eve ...

  8. IOS 极光推送(第三方框架)

    下载极光推送文件,将以下两个文件导入项目中 APService.h libpushSDK.a #import "HMAppDelegate.h" #import "APS ...

  9. 提高iOS开发效率的第三方框架等

    http://zhangmingwei.iteye.com/blog/2208783 http://www.kuqin.com/shuoit/20150703/346900.html

随机推荐

  1. Foreach与迭代器

    Foreach与迭代器 Foreach语句可以用于数组和集合的遍历.之所以能够工作,是因为Java SE5引入了新的被称为Iterable的接口,该接口中包含一个能够产生Iterator的iterat ...

  2. 部署Nginx

    部署Nginx #下载nginx wget http://nginx.org/download/nginx-1.12.2.tar.gz#安装依赖 yum install pcre-devel open ...

  3. hdu多校5

    1002 思路:贪心显然不好贪,直接爆搜. #include<bits/stdc++.h> #define LL long long #define fi first #define se ...

  4. 转:Apache+Fastcgi+Django

    07年作者就贴出的文章了,可见多么古老的运行方式还在用. 转:http://www.cnblogs.com/RChen/archive/2007/03/23/django_fcgi.html 首先要安 ...

  5. HTTP(HyperText Transport Protocol)超文本传输协议的状态码

    关于HTTP状态码:是用于表示网页服务器HTTP响应状态的3位数字代码. 所有状态码的第一个数字代表了响应的五种状态之一. 1xx:消息:这一类型的状态码代表请求已被接受,需要继续处理 2xx:成功: ...

  6. spark sql遇到的问题

    项目背景:计算平台架构hadoop spark   spark on yarn,支持多种sql引擎如hive.spark sql.impala等. 问题描述:SPARK SQL在做insert ove ...

  7. Ajax使用进阶

    关于Ajax的概念不再做解释了,我想通过三个小例子来让大家对Ajax有个清晰的认识.要学习它,必须从最基础最原始的方式开始认识,然后通过使用框架来提升效率,逐步认识它. 一.原生js版(注册的用户名是 ...

  8. Linux命令之rlogin

    rlogin [-8EKLdx] [-e char] [-l username] host rlogin在远程主机host上开始一个终端会话. (1).选项 -8 选项允许进行8位的输入数据传送:否则 ...

  9. luogu P1016 旅行家的预算

    题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  10. Manacher算法总结

    部分图片转自:http://www.cnblogs.com/grandyang/p/4475985.html manacher算法(民间称马拉车算法233)是用来找字符串中的最长回文子串的,先来说一下 ...