在gcdasyncsocket ios中断开套接字连接时未获得回调

在gcdasyncsocket ios中断开套接字连接时未获得回调,ios,objective-c,callback,disconnect,gcdasyncsocket,Ios,Objective C,Callback,Disconnect,Gcdasyncsocket,我已经面临这个问题很多天了。虽然我使用了socketdiddisconnect方法,但在SocketDisconnect上没有收到回调,但它只在某些情况下收到回调,比如当我写入输入流时。我正在使用mac os sierra,并在xcode 8.3.2上运行iphone 5s 10.3.2的代码。任何帮助都将不胜感激 下面是我在我的类中实现的一些方法 #for socket creation -(void)start { NSLog(@"PROVO..."); _tcpSock

我已经面临这个问题很多天了。虽然我使用了socketdiddisconnect方法,但在SocketDisconnect上没有收到回调,但它只在某些情况下收到回调,比如当我写入输入流时。我正在使用mac os sierra,并在xcode 8.3.2上运行iphone 5s 10.3.2的代码。任何帮助都将不胜感激

下面是我在我的类中实现的一些方法

#for socket creation
-(void)start
{


    NSLog(@"PROVO...");
    _tcpSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

    NSError *error = nil;
    NSString *hostname = @"192.168.11.254";
    uint16_t port = 8080;



    if (![_tcpSocket connectToHost:hostname onPort:port withTimeout:5.0 error:&error])
    {
        NSLog(@"Unable to connect to due to invalid configuration: %@", error);
    }
    else
    {
       // _isSocketConnected = YES;
        NSLog(@"Connecting...");
    }
//    while (true) {
//        if ([_tcpSocket isDisconnected]) {
//            [NSThread sleepForTimeInterval:2];
//            [self start];
//        }
//    }

}


#for writing data to stream
-(void)writeOut:(NSString *)s second:(NSString *)cmd
{
    if (s == nil) {
        return;
    }
    _packDict = [[NSMutableDictionary alloc]init];

    [_packDict setValue:s forKey:cmd];

    //[[[TcpPacketClass sharedInstance]delegatesArray]count];

    NSLog(@"Writing out the following:");
    NSLog(@"%@", s);
    NSData *requestData = [s dataUsingEncoding:NSUTF8StringEncoding];

    if (self.tcpSocket!=nil&&[_tcpSocket isConnected]) {
        NSLog(@"Data write successfully");
        [_tcpSocket writeData:requestData withTimeout:-1.0 tag:0];
    }
    if ([_tcpSocket isConnected]) {
        [_tcpSocket readDataWithTimeout:-1 buffer:[NSMutableData data] bufferOffset:0 maxLength:0 tag:0];
    }

    // [NSThread sleepForTimeInterval:2];


}
#get called when socket created
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
{

    NSLog(@"socket:didConnectToHost:%@ port:%hu", host, port);
    _isSocketConnected = YES;
    NSString *zeroIndex;
   // [[AppLoading sharedInstance] setDeviceDateTimeApiCall];

    if (_packDict.count >0) {
        NSArray *keys = [_packDict allKeys];
      zeroIndex =  [keys objectAtIndex:0];
    }
    NSString *packStr= [_packDict objectForKey:zeroIndex];
    NSData *requestData = [packStr dataUsingEncoding:NSUTF8StringEncoding];

    [sock writeData:requestData withTimeout:3.0 tag:0];
    NSLog(@"packet sent successfully");
    //  [_packDict removeAllObjects];

    //[_tcpSocket readDataToLength:sizeof(uint64_t) withTimeout:-1.0 tag:0];
    dispatch_queue_t alwaysReadQueue = dispatch_queue_create("com.cocoaasyncsocket.alwaysReadQueue", NULL);

    dispatch_async(alwaysReadQueue, ^{
        while(![_tcpSocket isDisconnected]) {
            [NSThread sleepForTimeInterval:5];
            [_tcpSocket readDataWithTimeout:-1 tag:0];
        }
    });
       // [sock readDataWithTimeout:-1 tag:0];

}


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


    NSLog(@"hello its me:");
//    if (_tcpSocket.writeStream==nil) {
//        NSLog(@"write stream closed");
//        [_tcpSocket setDelegate:nil];
//        [_tcpSocket disconnect];
//        [self start];
//    }
    if ([_tcpSocket isDisconnected]) {
        NSLog(@"read stream closed");
//        [_tcpSocket setDelegate:nil];
//        [_tcpSocket disconnect];
        [self start];
    }
    //[_tcpSocket readDataWithTimeout:-1 buffer:[NSMutableData data] bufferOffset:0 maxLength:0 tag:0];

}


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


    NSLog(@"socketDidDisconnect:withError: \"%@\"", err);
    [_tcpSocket setDelegate:nil];
    [_tcpSocket disconnect];
    [NSThread sleepForTimeInterval:2];
    [self start];


}