美文网首页iOS开发iOS
使用CocoaAsyncSocket的tcp连接和简单实用

使用CocoaAsyncSocket的tcp连接和简单实用

作者: AlexLi_ | 来源:发表于2016-05-05 16:26 被阅读6528次

    CocoaAsyncSocket下载
    CocoaAsyncSocket支持tcp和udp。其中:
    *AsyncSocket类是支持TCP的
    *AsyncUdpSocket是支持UDP的

    1、导入文件GCDAsyncSocket
    2、导入头部文件
    3、端口号和主机ip

    NSString *host = @"127.0.0.1";
    int port = 12345;
    

    4、创建一个socket对象

    //将GCDAsynSocket设置为全局变量
    GCDAsyncSocket *socket = [[GCDAsyncSocket alloc] initWithDelegate:self  delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)];
    

    delegate:一半看到代理我们都写self
    delegateQueue:

    全局队列(代理的方法是在子线程被调用)

    dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)
    

    主队列(代理的方法会在主线程被调用)

    dispatch_get_main_queue()
    

    <b>如果代理里的动作 是 耗时的动作,就 不能 在主线程中调用,要 在子线程中</b>
    <b>如果代理里的动作 不 是耗时的动作,就 能 在主线程中调用,不需要 在子线程中</b>

    优先级 我们设置默认 开发者使用默认
    5、连接

    NSError *error = nil;
    [socket connectToHost:host onPort:port error:&error];
    

    这里可以输出error
    6、如何知道连接成功失败
    6.1、代理GCDAsyncSocketDelegate
    6.2、实现代理方法
    didConnectToHost 连接成功
    didDisconnect 断开连接(如果error有值,连接失败,如果没值,正常断开)

    connect、read、write、disconnect,GCDAsyncSocket

    write:

    [_socket writeData:[msg dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:101];
    //withTimeout: 超时时间 -1  表示不超时
    //tag: 一个标识
    

    代理方法 didWriteDataWithTag 数据发送成功 手动读取(readDataWithTag) 才会调用read代理方法 (didReadData)
    read:
    1、实现代理方法 didReadData

    http://pan.baidu.com/s/1i43R3Yt 提取密码:4xme

    实用CocoaAsyncSocket创建tcp服务器

    相关文章

      网友评论

      • 乱尘:就想问问,为什么不挂 三方库作者的GitHub,而自己丢个自己的百度盘

        https://github.com/robbiehanson/CocoaAsyncSocket
        乱尘:@L了个H 理论可以,实际你还是用https吧
        L了个H:CocoaAsyncSocket 能传输视频么
        AlexLi_:@乱尘 那时候还在读书。。。没管那么多
      • feng55:Error Domain=NSPOSIXErrorDomain Code=65 "No route to host" UserInfo={NSLocalizedDescription=No route to host, NSLocalizedFailureReason=Error in connect() function} 这个错误是什么原因呢
        NotFunGuy:@CancerJing 但是如果我直接运行控制台程序 就可以开启监听 如果我是写的MAC APP程序 就不行 我也不知道为什么
        AlexLi_:@STzen 是遇到了, 发送一次后, 就又要重连的问题吗 , 上面服务端 的demo 是有问题的。 可以去百度下载一个py 的服务端 运行下。
        NotFunGuy:你好 我也正好遇到这个问题了 请问你怎么解决的呀
      • feng55:完全没有消息返回啊。请问怎么才能知道自己的tcp消息发送成功了
      • 丶丶夏天:为什么客户端发送一次之后再发送消息就没用了
      • b1eacb30758d:用来保持客户端与服务器的长链接的一个文件?
      • shushuzhen:udp连接的话就只需要更改socket对象为udp那个是吗?

      本文标题:使用CocoaAsyncSocket的tcp连接和简单实用

      本文链接:https://www.haomeiwen.com/subject/gwpdrttx.html