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
随机推荐
- django 上传图片、使用PIL制作缩略图并保存到sea的storage
上传图片解析: SAE的设置指引如下: 处理用户上传文件 在setttings.py中添加以下配置. # 修改上传时文件在内存中可以存放的最大size为10m FILE_UPLOAD_MAX_MEMO ...
- linux下查看机器配置
查看cpu信息:lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): ...
- Django web框架之模板继承
模板继承 (extend) Django模版引擎中最强大也是最复杂的部分就是模版继承了.模版继承可以让您创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 block ...
- 【转载】Python测试框架doctest
原文在这里 :Python测试框架doctest 先记录一下,直接复制粘贴后,排版是乱的,后续再弄.
- VS Code js编译支持alias
VS Code 的编译器 其实就是使用的 typescript 编译器,就是以前提到过的 tsserver.js 相应的编译参数可以参考 http://www.typescriptlang.org/d ...
- .NET 简单的递归使用场景
什么是递归:自己调用自己,直到满足条件跳出 递归的缺点: 递归很耗内存,容易让机器挂掉 比如递归文件夹,当文件夹的层级有非常非常多的时候,就很容易挂掉,因为递归的时候把上层文件夹的上下文都保存在内存中 ...
- 使用css中的flex布局弹性手风琴效果
不多说,直接上代码. <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 四十一 常用内建模块 datetime
datetime是Python处理日期和时间的标准库. 获取当前日期和时间 我们先看如何获取当前日期和时间: >>> from datetime import datetime &g ...
- (3) go 指针
1.获取地址 取地址 &i 2.指针 var p *int=&i ptr 是一个地址 *ptr 是可看成一个变量,该地址所在的变量,也就是 num 3.常见值类型 引用类型 值类型:栈 ...
- [Codeforces #190] Tutorial
Link: Codeforces #190 传送门 A: 明显答案为$n+m-1$且能构造出来 #include <bits/stdc++.h> using namespace std; ...