GCDAsyncSocket连接成功收不到消息与GCDAsyncSocket自我debug

原因出在这个方法:[self.clientSocket readDataWithTimeout:-1 tag:0];


在连接成功的代理中:

//连接成功

-(void)socket:(GCDAsyncSocket*)sockdidConnectToHost:(NSString*)hostport:(uint16_t)port {

    NSLog(@"--连接成功--");

//必须加这个方法

    [self.clientSocket readDataWithTimeout:-1 tag:0];

}

在收到消息的代理中:

//收到的消息
-(void)socket:(GCDAsyncSocket*)sockdidReadData:(NSData*)datawithTag:(long)tag {

//也必须调用这个方法

    [self.clientSocket readDataWithTimeout:-1 tag:0];

//数据格式转换

    NSString*recvStr;

    if(data) {

        recvStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    }

    NSLog(@"%@",recvStr);

}

完整的代码

#import <GCDAsyncSocket.h>

@interface MYSocketHelper () < GCDAsyncSocketDelegate>

@property (nonatomic, strong) GCDAsyncSocket *clientSocket;

@end

-(void)asynSocketInit {

    self.clientSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(0, 0)];

    NSError*err =nil;

    if (![self.clientSocket connectToHost:@"127.0.0.1" onPort: 60000 error:&err])   {

        NSLog(@"I goofed: %@", err);

    } else {

        [self.clientSocket writeData:[@"xxxx" dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0];

    }

}

-(void)socket:(GCDAsyncSocket*)sockdidConnectToHost:(NSString*)hostport:(uint16_t)port {

    NSLog(@"--连接成功--");

    [self.clientSocket readDataWithTimeout:-1 tag:0];

}

-(void)socket:(GCDAsyncSocket*)sockdidReadData:(NSData*)datawithTag:(long)tag {

    [self.clientSocket readDataWithTimeout:-1 tag:0];

    NSString*recvStr;

    if(data) {

        recvStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    }

    NSLog(@"%@",recvStr);

}

- (void)socket:(GCDAsyncSocket*)sockdidReadPartialDataOfLength:(NSUInteger)partialLengthtag:(long)tag {


}

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


}

自测的话可以下载一个ssokit,模拟了socket服务端,能收发消息


ssokit界面

地址:127.0.0.1本机的地址,端口范围 1024~65535。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iPhone的标准推荐是CFNetwork 库编程,其封装好的开源库是 cocoa AsyncSocket库,用它...
    Ethan_Struggle阅读 6,700评论 2 12
  • 相关概念: 单播、多播(组播)和广播的区别 http://blog.csdn.net/wangerge/artic...
    三毛中队长阅读 9,622评论 0 1
  • OSI: 开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(...
    JS_诗和远方阅读 1,729评论 0 0
  • 先UDP组播 socket 再TCP建立长连接 同一个局域网下,各设备提供udp socket监听服务,手机客户端...
    蛋白质corn阅读 2,540评论 0 0
  • Socket的基本概念 1.定义 网络上两个程序通过一个双向通信连接实现数据交互,这种双向通信的连接叫做Socke...
    Geniusn阅读 3,437评论 0 0