Question

I tried to connect to the server and send some information to the server(like username, password..), and the server send me back the ID (string type). The problem is I can not get the ID. Could anyone help me? I am beginner in IOS coding. Thanks.

Here is the codes:

  1. After I click the button, it will call my own function to get serverIP which is a string and Port which is a int.
  2. Then that function will call this function to connect the server:

    (void)logInCheck {
    
        asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];   
        NSError *error = nil;
        uint16_t port = serverPort;
    
        if (![asyncSocket connectToHost:serverIP onPort:port error:&error])
        {
            DDLogError(@"Unable to connect to due to invalid configuration: %@", error);
        }
        else
        {
            DDLogVerbose(@"Connecting...");
            [self passDataToServer];
        }
    }
    
    //DataPassToServer is a NSString that hold my data
    
    (void)passDataToServer
    {
        NSData *requestData = [DataPassToServer dataUsingEncoding:NSUTF8StringEncoding];
        [asyncSocket writeData:requestData withTimeout:-1.0 tag:0];
        [asyncSocket readDataWithTimeout:-1 tag:0];
    }
    
    //this function call successfully
    
    -(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
    {
        DDLogVerbose(@"socket:didConnectToHost:%@ port:%hu", host, port);
    }
    
    //this function call successfully
    
    (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag
    {
        DDLogVerbose(@"socket:didWriteDataWithTag:");
    }
    
    //This function does not run !!! Nothing print out. 
    
    (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
    {
        DDLogVerbose(@"socket:didReadData:withTag:");
        NSString *response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"ID = %@",response);
        [asyncSocket readDataWithTimeout:-1 tag:0];
    }
    
Était-ce utile?

La solution

I don't know about your server implementation but, most implementations would read up to the first newline character before processing the request.

So make sure that your [DataPassToServer dataUsingEncoding:NSUTF8StringEncoding] includes a newline character ("\n") at the end.

Your code looks fine and works for me.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top