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上的。

时间: 2024-11-22 18:54:44

iOS:基于Socket的第三方框架CocoaAsyncSocket的使用的相关文章

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

MBProgressHUD ——进展指示符库 苹果的应用程序一般都会用一种优雅的,半透明的进度显示效果,不过这个API是不公开的,因此你要是用了,很可能被清除出AppStore.而 MBProgressHUD提供了一个替代方案,而且在用户角度上,实现的效果根本看不出和官方程序有什么差别.同时还提供了其他附加功能,比如虚拟进展 指示符,以及完成提示信息.整合到项目里也很容易,这里不细谈了. ASIHttpRequest ——HTTP Network库 iPhone当然也有自己的HTTP Netwo

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

iOS开发之常用第三方框架(下载地址,使用方法,总结) 说句实话,自学了这么久iOS,如果说我不知道的但是又基本上都摸遍了iOS相关知识,但是每次做项目的时候,遇到难一点的地方或者没试过的东西就闷了. 比如这次,打算做一个着手做一个iOS的项目,是一个关于日计划的小软件,界面都其他的都算满意,网络就不说了,没有服务器,所以很多数据相关的功能不无法实现. 但是嘴头疼的事情就是,比如遇到一个功能的时候,其实如果说要实现的话还是可以的,但是每次在我实现之后我总会想到,这么实现更好,这么实现更简单,更加

iOS学习之常用第三方框架总结(经典/必看)

写iOS 程序的时候往往需要很多第三方框架的支持,可以大大减少工作量,讲重点放在软件本身的逻辑实现上. GitHub 里面有大量优秀的第三方框架,而且 License 对商业很友好.一下摘录一下几乎每个项目都想集成的几个框架. SDWebImageView 1. Mantle Mantle 让我们能简化 Cocoa 和 Cocoa Touch 应用的 model 层.简单点说,程序中经常要进行网络请求,请求到得一般是 json 字符串,我们一般会建一个 Model 类来存放这些数据.这就要求我们

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

网络编程第三方框架:AFNetworking.SDWebImage 介绍:这些框架是开源的,经过前人的封装.改进,成为使用次数很多的一个性能好的源代码框架,只需要将它导入项目中,就可以使用.因此,在做项目时,使用它能够大大地提高效率. ※ 一.AFNetworking:功能是用来下载网络数据(包括文件,图片等) 属性如下: ※NSURLConnection: AFURLConnectionOperation AFHTTPRequestOperation AFHTTPRequestOperatio

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

这篇文章,我们介绍CocoaAsyncSocket框架的使用,主要介绍实现客户端/服务器端代码,相信在网上已经很多这样的文章了,这里做一下自己的总结.这里介绍使用GCD方式 一.客户端 1.下载地址 读者可以在github下载框架源码 https://github.com/robbiehanson/CocoaAsyncSocket 下载后,可以看到在Examples下面可以看到很多例子,如果读者自学能力高,可以略过下面的文章. 2.开始使用 1)在 \Source\GCD 目录下,我们可以看到G

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

1. Mantle Mantle 让我们能简化 Cocoa 和 Cocoa Touch 应用的 model 层.简单点说,程序中经常要进行网络请求,请求到得一般是 json 字符串,我们一般会建一个 Model 类来存放这些数据.这就要求我们编写一系列的序列化代码,来把 json 转换为 Model .这很费时间,容易错,不容易修改. Mantle 很好的解决了这个问题,而且更易用. GitHub : https://github.com/Mantle/Mantle 参考: 工具篇: Mantl

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

以前实现简单 Server 程序,服务端通过 void WriteStreamClientCallBack(CFWriteStreamRef stream, CFStreamEventType eventType, void* clientCallBackInfo) 函数向client发送"你好.client!"的消息,假设client接收成功的话就会显示"你好.client! ".须要显示服务端发送过来的消息.那么就须要定义一个UILabel输出口(IBOutle

重新签名IOS .ipa文件 (包含第三方框架和插件)

本文未经测试,初步看代码流程接近本人想法,留下作记录.Intoduction This code allow you to resign your own ipa assuming that you have:1) a developer certificate issued by apple and added to your keychain2) a mobileprovision file This code allow you to resign your app without usi

IOS第三方框架集合-02

IOS第三方框架集合 Reachability 检测网络连接 用来检查网络连接是否可用:包括WIFI和WWAN(3G/EDGE/CDMA等)两种工作模式. 现在有更好的替代品:https://github.com/tonymillion/Reachability,比Apple提供的兼容性更好,而且更加好用,更具体的使用方法请看它提供的例子. Reachability reach = [Reachability reachabilityWithHostname:@"www.google.com&q