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:8888 error:&error];
}

#pragma mark - 代理方法
//接受到新的scoket
- (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket
{
    //将新接收到的socket加入数组中
    [_scokets addObject:newSocket];
    
    //开始接受数据
    [newSocket readDataWithTimeout:-1 tag:0];
}

//接收端收到信息
- (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:-1 tag:0];
}

//连接服务器成功
- (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:8888 withTimeout:30 error:nil];
}

//发送消息
- (IBAction)sendClicked:(UIButton *)sender {
    
    //客户端发送数据
    NSData *data = [self.sendField.text dataUsingEncoding:NSUTF8StringEncoding];
    [_sendSocket writeData:data withTimeout:30 tag:0];
    
    //清空数据
    self.sendField.text = @"";
}

//断开服务器
- (IBAction)disConeClicked:(UIButton *)sender
{
    if (_sendSocket.isConnected)
    {
        [_sendSocket disconnect];
    }
}
@end
复制代码

 测试如下:

(1)打开电脑的网络设置,看一下ip和设置端口为8888

(2)运行程序,在演示中输入ip和消息

一开始:                             输入ip和消息,然后连接服务器

  

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

    

 

断开服务器:

  

断开服务器后,再尝试发送数据,是无法发送并显示在UITextView上的。

 

 

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/5169209.html ,如需转载请自行联系原作者

相关文章
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
是否有其他框架可以在iOS设备上进行机器学习?
是否有其他框架可以在iOS设备上进行机器学习?
21 1
|
3月前
|
存储 数据建模 iOS开发
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
32 1
|
3月前
|
定位技术 iOS开发
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
19 0
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
26 0
|
3月前
|
iOS开发
iOS设备功能和框架: 如何使用 Core Animation 创建动画效果?
iOS设备功能和框架: 如何使用 Core Animation 创建动画效果?
99 0
|
5月前
|
小程序 开发工具 Android开发
Donut多端框架小程序打包适配ios和安卓app
腾讯新出了一个 Donut 多端框架,可以直接将微信小程序转成 ios 和 安卓 app,小程序开发者工具里也集成了 app 相关升级、调试和打包的功能,终于可以一套代码开发出3个客户端了!
120 0
Donut多端框架小程序打包适配ios和安卓app
|
5月前
|
移动开发 网络协议 安全
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v8.0版已发布
MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持 UDP 、TCP 、WebSocket 三种协议,支持 iOS、Android、H5、标准Java、小程序、Uniapp,服务端基于Netty编写。
68 0
|
7月前
|
Swift iOS开发
IOS 小说阅读《覆盖翻页》效果框架 DZMCoverAnimation
IOS 小说阅读《覆盖翻页》效果框架 DZMCoverAnimation
53 0
|
7月前
|
移动开发 小程序 Android开发
支付宝小程序IOS连接mqtt接收AMQJS0007E Socket error
支付宝小程序IOS连接mqtt接收AMQJS0007E Socket error
62 0
|
9月前
|
JavaScript Android开发 iOS开发
layui框架实战案例(6):上传图片和视频自动调用IOS或安卓系统的摄像头功能
layui框架实战案例(6):上传图片和视频自动调用IOS或安卓系统的摄像头功能
223 0