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月前
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
14天前
|
消息中间件 网络协议 C#
C#使用Socket实现分布式事件总线,不依赖第三方MQ
`CodeWF.EventBus.Socket` 是一个轻量级的、基于Socket的分布式事件总线系统,旨在简化分布式架构中的事件通信。它允许进程之间通过发布/订阅模式进行通信,无需依赖外部消息队列服务。
C#使用Socket实现分布式事件总线,不依赖第三方MQ
|
15天前
|
移动开发 网络协议 小程序
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v9.1版已发布
RainbowChat是一套基于开源IM聊天框架 MobileIMSDK 的产品级移动端IM系统。RainbowChat源于真实运营的产品,解决了大量的屏幕适配、细节优化、机器兼容问题
46 5
|
13天前
|
Swift iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】在苹果生态系统中,SwiftUI的引入无疑为iOS应用开发带来了革命性的变化。本文将通过深入浅出的方式,带领读者了解SwiftUI的基本概念、核心优势以及如何在实际项目中运用这一框架。我们将从一个简单的例子开始,逐步深入到更复杂的应用场景,让初学者能够快速上手,同时也为有经验的开发者提供一些深度使用的技巧和策略。
38 1
|
2月前
|
iOS开发 开发者 UED
探索iOS应用开发中的SwiftUI框架
【9月更文挑战第26天】 在iOS开发的海洋中,SwiftUI犹如一艘现代的快艇,引领着开发者们驶向更加高效与直观的编程体验。本文将带你领略SwiftUI的魅力,从其设计理念到实际应用,我们将一步步揭开它如何简化界面构建过程的面纱。通过对比传统方式,你将看到SwiftUI如何让代码变得像诗一样优美,同时保持强大的功能性和灵活性。准备好让你的iOS开发技能加速升级,一起驾驭这股新潮流吧!
|
2月前
|
前端开发 iOS开发 开发者
探索iOS开发中的SwiftUI框架
【9月更文挑战第21天】在iOS应用开发的广阔天地中,SwiftUI框架如一股清新之风,为开发者带来了声明式语法的便捷与高效。本文将深入探讨SwiftUI的核心概念、布局方式及数据绑定机制,同时通过实例演示如何运用SwiftUI构建用户界面,旨在引领读者领略SwiftUI的魅力,并激发其对iOS开发新趋势的思考与实践。
42 6
|
2月前
|
开发工具 Swift iOS开发
探索iOS开发中的SwiftUI框架
【9月更文挑战第1天】在本文中,我们将一起潜入iOS开发的海洋,特别聚焦于SwiftUI这一现代且富有表现力的框架。SwiftUI不仅简化了界面设计流程,还为开发者提供了声明式Swift语法的便利。通过这篇文章,你将学会如何利用SwiftUI构建灵活且响应式的用户界面,并理解其背后的原理。无论你是刚入门的新手还是寻求进阶的开发者,本文都将为你提供有价值的指导和启示。
|
3月前
|
设计模式 Java Android开发
探索安卓应用开发:从新手到专家的旅程探索iOS开发中的SwiftUI框架
【8月更文挑战第29天】本文旨在通过一个易于理解的旅程比喻,带领读者深入探讨安卓应用开发的各个方面。我们将从基础概念入手,逐步过渡到高级技术,最后讨论如何维护和推广你的应用。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的代码示例。让我们一起开始这段激动人心的旅程吧!
|
3月前
|
存储 Swift iOS开发
探索iOS开发中的SwiftUI框架
【8月更文挑战第29天】本文旨在引导读者理解并掌握SwiftUI框架,通过简明的语言和直观的代码示例,揭示SwiftUI如何让iOS开发变得更加简单高效。文章不仅介绍基础知识,更深入探讨了SwiftUI的核心特性、布局技巧以及与UIKit的差异,为开发者提供实用的学习路径和实践指南。
|
3月前
|
iOS开发 开发者 UED
探索iOS开发中的SwiftUI框架
【8月更文挑战第20天】本文深入探讨了SwiftUI,这是一个为iOS开发设计的现代化用户界面框架。通过分析SwiftUI的设计理念、核心特性以及与传统UIKit框架的区别,文章揭示了SwiftUI如何简化开发者的工作流程并提升应用性能。同时,文章也讨论了SwiftUI在实现响应式设计方面的能力和它对iOS开发生态的潜在影响。