GCDAsyncSocket使用

第一次写东西文笔不好,不知道从何下手,想想就从这段时间做智能家居相关的APP中遇到的GCDAsyncSocket使用问题着手吧!

首先得大概了解TCP原理和UDP的一点区别!当然了我自己也是似懂非懂的状态,这些还是要靠自己慢慢摸索,多看看别人的blog见解,网上一搜一大把。GCDAsyncSocket是IOS中TCP通讯使用的一个第三方库。至于的它的什么三次握手啊这些网上多的很,我也不做过多的重复。下面就从demo开始吧!

//客户端方面

导入库 #import"GCDAsyncSocket.h" 这个可以从git上面下载!记得要实现它的GCDAsyncSocketDelegate!

现在就开始初始化GCDAsyncSocket对象l,同时需要连接到服务端IP和固定端口,就是先建立一个通讯的通道。

- (IBAction)connectBtn:(id)sender {

NSError* err;

clientSocket=[[GCDAsyncSocketalloc]initWithDelegate:selfdelegateQueue:dispatch_get_main_queue()];

[clientSocketconnectToHost:IPTextField.textonPort:PortTextField.text.intValueerror:&err];

}

这里实现GCDAsyncSocketDelegate可以判断通道是否建立成功,失败的话你可以选择继续重连,这个根据具体情况来定

- (void)socket:(GCDAsyncSocket*)sock didConnectToHost:(NSString*)host port:(uint16_t)port {

NSLog(@"连接成功---%@----%d",host,port);

UIAlertView* av=[[UIAlertViewalloc]initWithTitle:@"连接成功"message:nildelegate:nilcancelButtonTitle:@"OK"otherButtonTitles:nil,nil];

[av show];

[sockreadDataWithTimeout:-1tag:100];

}

// 如果对象关闭了 这里也会调用

- (void)socketDidDisconnect:(GCDAsyncSocket*)sock withError:(NSError*)err {

NSLog(@"连接失败 %@", err);

// 断线重连

[clientSocketconnectToHost:IPTextField.textonPort:(uint16_t)(PortTextField.text.intValue)error:&err];

}

现在的话就是发送数据给服务端了,通讯毕竟是为了传输数据的。这里可以直接调用GCDAsyncSocket本身的write方法,这里的timeout是超时时间,

- (IBAction)sendData:(id)sender {

NSData* data=[ProtocolCommandaddNumberCommandWithNumber:ContentTextField.text];

[clientSocketwriteData:datawithTimeout:6 tag:100];

}

当数据发送成功的话也会回调GCDAsyncSocketDelegate里面的方法:这个的话就可以选择性重发数据

- (void)socket:(GCDAsyncSocket*)sock didWriteDataWithTag:(long)tag {

NSLog(@"---发送数据的 tag---%ld",tag);

}

前面的这些只是单纯的发送数据到服务端,但绝大部分我们需要接收服务端返回的数据来判断发送的数据是否正确!这个也是回调GCDAsyncSocketDelegate里面的方法:至于数据的处理就得看服务器的定义了 这个就不做解释了。

- (void)socket:(GCDAsyncSocket*)sock didReadData:(NSData*)data withTag:(long)tag {

NSString*ip = [sockconnectedHost];

uint16_tport = [sockconnectedPort];

NSString*s = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];

UIAlertView* av=[[UIAlertViewalloc]initWithTitle:@"接收数据"message:sdelegate:nilcancelButtonTitle:@"OK"otherButtonTitles:nil,nil];

[avshow];

NSLog(@"接收到服务器返回的数据 tcp [%@:%d] %@", ip, port, s);

[sockreadDataWithTimeout:-1tag:tag];//持续接收服务端放回的数据

}

第一次就这么多吧,不足之处希望多多谅解!

时间: 2024-10-16 07:15:25

GCDAsyncSocket使用的相关文章

第2月第1天 GCDAsyncSocket dispatch_source_set_event_handler

一.GCDAsyncSocket的核心就是dispatch_source_set_event_handler 1.accpet回调 accept4Source = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, socket4FD, 0, socketQueue); int socketFD = socket4FD; dispatch_source_t acceptSource = accept4Source; dispatch_source_

GCDAsyncSocket~

第三方的一个socket通信框架,原生的一般用的人比较少,优秀第三方可以提升开发效率,减少开发中出现错误的几率 下面的代码是实例化一个socket对象,并为其指定代理,指定代理方法运行的队列 _socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)]; 下面的代码是指定一个主机名,一个端口号,

GCDAsyncSocket通信

// // ViewController.m // Socket1 // // Created by 阿仁欧巴 on 16/5/7. // Copyright © 2016年 aren. All rights reserved. // #import "ViewController.h" #import "GCDAsyncSocket.h" @interface ViewController () < UITextFieldDelegate, UITableV

iOS开发——GCDAsyncSocket

新进的这家公司搞智能家居,就随便整理一下其相关技术吧!首先,从GCDAsyncSocket的使用问题着手. 正如名称一样GCDAsyncSocket开源类库是以苹果的GCD多任务处理机制完成的一个异步交互套接字通讯.使用方法其实并不复杂.每一个GCDAsyncSocket对象(以下简称GCDSocket对象)都可以理解为一个socket套接字,我们的操作都是针对于这个socket执行的各种命令,可以打开一个端口侦听,同样也可以连接其他计算机的端口进行数据通讯等等等等. 首先我们来创建一个sock

01-socket第三方库 AsyncSocket(GCDAsyncSocket)

[IOS网络通信]socket第三方库 AsyncSocket(GCDAsyncSocket) Socket描述了一个IP.端口对.它简化了程序员的操作,知道对方的IP以及PORT就可以给对方发送消息,再由服务器端来处理发送的这些消息.所以,Socket一定包含了通信的双发,即客户端(Client)与服务端(server). 1)服务端利用Socket监听端口: 2)客户端发起连接: 3)服务端返回信息,建立连接,开始通信: 4)客户端,服务端断开连接. 1套接字(socket)概念 套接字(s

iOS Socket/Tcp编程 GCDAsyncSocket的实战(带回调)

很多同学一听到Socket TCP UDP 这几个字眼感觉特别害怕,很怕在工作当中使用,因为他们太底层了.下面我把我在工作中使用Socket类库GCDAsyncSocket进行一次实战 文章中只适用于小型数据传输, 如果比较到,例如音频文件的话,请自行拼接data. 首先向工程导入GCDAsyncSocket.h/GCDAsyncSocket.m 下载地址:链接:http://pan.baidu.com/s/1c1bHytM密码: p22g 然后创建一个单例类Client 继承于NSObject

XMPP适配IPV6 (GCDAsyncSocket适配IPV6)

苹果公司要求在6月1号之后上架Appstore的应用必须通过ipv6兼容测试. 最近到了八月份,开始发现新上架的app没有通过,查看了下原因,说没有适配IPV6. 首先在本地搭建一个IPV6的测试环境,使用mac搭建详情请看 http://blog.csdn.net/yuwuchaio/article/details/51459705 如果项目用使用了XMPP 你会发现在IPV6环境下根本登陆不上了,究极原因,是因为XMPP使用了第三方的socket库:CocoaAsyncSocket,里面包含

IOS GCDAsyncSocket

// // ViewController.m // 05.聊天室 // // Created by apple on 14/12/5. // Copyright (c) 2014年 heima. All rights reserved. // #import "ViewController.h" #import "GCDAsyncSocket.h" @interface ViewController ()<UITextFieldDelegate,UITable

CocoaAsyncSocket 文档3:介绍GCDAsyncSocket

原文地址:https://github.com/robbiehanson/CocoaAsyncSocket/wiki/Intro_GCDAsyncSocket GCDAsyncSocket is a TCP library. It's built atop Grand Central Dispatch. This page provides an introduction to the library. GCDAsyncSocket是一个TCP库.它建立在GCD技术之上.本页就是介绍这个库. I