`
joshuafei
  • 浏览: 885 次
文章分类
社区版块
存档分类
最新评论

GCDAsyncSocket的使用

阅读更多
什么是GCDAsyncSocket

GCDAsyncSocket 是用于 OS X 和 iOS 上的异步 Socket 网络通讯包。提供了易用而且功能强大的异步套接字开发库
https://github.com/robbiehanson/CocoaAsyncSocket
基本使用

dispatch_queue_t queue = dispatch_queue_create("com.test.testsocket.setter", DISPATCH_QUEUE_SERIAL);
_socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:queue socketQueue:nil];
上面这两部就做好了初始化的操作,而且要注意,socket在整个项目中都会用到,所以要做成单例抽取出来
由于苹果要求对ipv6做支持,所以还需要加上这段代码:
_socket.IPv4PreferredOverIPv6 = NO; // 设置支持IPV6
到此准备工作就做好啦。

连接socket

NSError *error = nil;

[self.socket connectToHost:@"你的域名" onPort:@"你的端口" withTimeout:@"超时时间" error:&error];
如果连接成功,我们会收到socket连接成功的回调,我们可以在这里做心跳的处理,或者token的验证等:
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port
如果连接失败,我们会收到失败的回调,可以失败里面做重连的操作
- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err
读和写

socket连接建立了,这个时候我们需要和后台约定好协议格式进行通信,比如我们可以长度+真实数据的格式进行通信
    // 将messageDict进行序列化(这里也可以使用kryo进行序列化,详情见http://www.jianshu.com/p/43f2a39ce1fd)NSData *contents = [NSJSONSerialization dataWithJSONObject:messageDict options:NSJSONWritingPrettyPrinted error:&error];
    if(error)
    {
        MyLog(@"%s--------error:%@",__func__,error);
    }
    // 获取长度int len = (int)contents.length;

    NSData *lengthData = [NSData dataWithBytes:&len length:sizeof(len)];
    // 发送长度
    [self.socket writeData:lengthData withTimeout:-1 tag:0];
    // 发送真实数据
    [self.socket writeData:contents withTimeout:-1 tag:0];
    // 读取数据
    [self.socket readDataWithTimeout:-1 tag:0];
我们在向服务器写完数据之后一定不要忘了调用读方法,这样才能收到从服务器那边返回的数据,并且会收到读的回调
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
在这个回调里面,我们可以用一个缓冲区来不断接收我们收到的数据,并且在收到完整的数据后进行相应的处理
断开socket连接

[self.socket disconnect];
这样子,socket的基本通信就告一段落啦

转载自微信号【IT牛料】
分享到:
评论

相关推荐

    SocketDemo:GCDAsyncSocket 使用演示

    SocketDemo: GCDAsyncSocket 使用演示 在iOS和macOS开发中,网络通信是不可或缺的一部分。GCDAsyncSocket是一款强大的Objective-C库,它利用Grand Central Dispatch(GCD)来处理异步套接字通信,提供了易于使用的...

    iOS根据别人博客利用GCDAsyncSocket写的Socket长连接demo

    在这个"iOS根据别人博客利用GCDAsyncSocket写的Socket长连接demo"中,我们可以学习到如何使用GCDAsyncSocket来构建一个功能齐全的Socket客户端。 首先,GCDAsyncSocket的核心概念是异步处理。在iOS应用中,由于主线...

    swift-使用GCDAsyncSocket写的客户端与服务器socket通讯

    本文将深入探讨如何使用GCDAsyncSocket来实现客户端与服务器之间的Socket通信。 首先,我们要理解Socket的基本概念。Socket是网络编程中的一个接口,允许两个进程通过网络进行通信。在Swift中,我们可以使用...

    GCDAsyncSocket

    - **多平台支持**:适用于iOS和Mac OS X平台,使用Objective-C编写,兼容Swift。 2. **GCDAsyncUdpSocket**: GCDAsyncUdpSocket是用于UDP(用户数据报协议)通信的组件。UDP是一种无连接、不可靠的传输协议,...

    异步Socket网络通讯包GCDAsyncSocket.zip

    8. **性能优化**:通过GCD的调度机制,GCDAsyncSocket能够有效地处理多个并发连接,优化资源使用,提高网络通信效率。 9. **回调机制**:GCDAsyncSocket提供了一系列的回调方法,如`socket:didConnectToHost:port:`...

    iOS SocketDemo

    GCDAsyncSocket使用GCD进行异步操作,使得代码更简洁、可维护性更强。 ### 3. 使用GCDAsyncSocket创建客户端 创建一个Socket客户端的基本步骤如下: 1. 初始化GCDAsyncSocket对象。 2. 设置代理方法以处理Socket...

    GCDAsyncSocket-TCP-UDP-Python-master.zip_GCDAsyncSocket_none8ol_

    《GCDAsyncSocket-TCP-UDP-Python:深入理解网络通信技术》 在现代软件开发中,网络通信是不可或缺的一部分,特别是在iOS和macOS...通过深入学习和使用GCDAsyncSocket,开发者可以构建出高性能、响应迅速的网络应用。

    GCDAsyncSocket TCP Server iOS例子

    GCDAsyncSocket简化了TCP连接的创建、管理和数据传输过程,提供了一种高效且易于使用的接口,使得开发者可以专注于业务逻辑,而不是底层网络编程的复杂性。 1. **GCDAsyncSocket基础** - GCDAsyncSocket支持TCP和...

    iOS Socket 使用Demo

    本示例“iOS Socket 使用Demo”将介绍如何使用GCDAsyncSocket库来构建一个简单的Socket应用,并解决丢包问题。 首先,我们需要了解Socket的基本概念。Socket是网络通信中的一个端点,它提供了进程间通信(IPC)的...

    python socke 通信demo

    在这个"python socket 通信demo"中,我们将探讨如何使用Python进行基于socket的客户端和服务器之间的通信,同时还会涉及多线程的概念。 首先,我们要理解socket的基本概念。在计算机网络中,socket可以被看作是两台...

    iOS AsyncSocket客户端与服务器

    AsyncSocket是一个强大的Objective-C库,它简化了在iOS平台上使用Cocoa进行TCP套接字编程的过程。本文将深入探讨如何利用AsyncSocket库构建一个简单的iOS客户端与服务器的通信系统。 首先,我们要了解Socket的基本...

    对GCDAsyncUdpSocket的简单封装,作为发送和接受广播,一般UDP报文的接口

    在实际应用中,`UdpSocketController`的使用者只需要调用相应的接口,就可以轻松地进行UDP报文的发送和接收,而无需关心底层复杂的网络编程细节。这样的封装使得网络通信模块更加模块化,有利于代码的复用和团队协作...

    swift-iOS原生Socket和CocoaAsyncSocket框架的简单使用

    Swift是Apple为iOS、macOS、watchOS和tvOS等平台设计的一种强大的编程语言,它在移动应用开发中被广泛使用。在iOS开发中,有时我们需要进行低级网络通信,这时就会涉及到Socket编程。Socket是一种在不同计算机之间...

    swift服务器通信

    本主题将深入探讨如何使用GCDAsyncSocket库在Swift中实现服务器通信。GCDAsyncSocket是由Deusty LLC开发的一个强大的异步网络库,它基于苹果的Grand Central Dispatch (GCD)框架,提供了一种高效且易于使用的接口来...

    用Xcode写的AsyncSocket客户端和服务器端Demo

    这个Demo是基于Xcode构建的,展示了如何使用AsyncSocket实现客户端和服务器端的数据交互。在这个项目中,你可以了解到如何建立连接、发送和接收数据,这对于理解网络编程的基础概念至关重要。 首先,AsyncSocket库...

    ios设备连接pc端

    4. **iOS客户端实现**:在iOS设备上,使用`GCDAsyncSocket`创建一个UDP客户端,初始化后设置发送数据的端口和IP地址(可能是一个广播地址),然后开始发送请求。同时,也需要注册接收数据的回调,以便接收服务器的...

    ios socket通信代码

    在iOS开发中,我们可以使用CocoaAsyncSocket、GCDAsyncSocket等开源库来简化Socket编程。这些库封装了底层的Socket API,提供了易于使用的对象和方法,使得开发者能够快速地实现Socket通信功能。 三、...

    ios聊天界面/图库图片选择/View弹出/UDP使用/地图

    在iOS中,通常使用`CFNetwork`框架的`CFSocket`或`GCDAsyncSocket`第三方库来实现UDP通信。开发者需要手动处理连接建立、数据发送与接收、错误处理等步骤。 5. **地图**:地图功能通常基于`MapKit`框架实现,它提供...

    iphone socket用法

    "iPhone Socket用法"主要涉及如何在iOS应用中使用Socket接口来实现数据的发送与接收。这里我们将详细讲解Socket的基本概念、在Objective-C中的使用方法,以及如何处理连接成功和数据接收的回调。 Socket,也被称为...

    bonjour_ios_tvos:服务器客户端代码,用于通过bonjour和GCDAsyncSocket框架通过共享网络(如WIFI)将iOS或TVos设备连接在一起。 - 编辑

    bonjour_ios_tvos 服务器/客户端代码,用于在共享网络(如WIFI)上使用bonjour和GCDAsyncSocket框架将iOS或TVos设备连接在一起。 - 编辑 这是从以下修改而来的: :

Global site tag (gtag.js) - Google Analytics