Вопросы по использованию связи и структур сокетов iOS (Objective-C) - PullRequest
0 голосов
/ 06 ноября 2018

Сервер используется в C ++.

Я хочу передать значения на сервер и структуру на основе прикрепленного кода.

Есть три значения для отправки на сервер. значение1 составляет до 7 байтов, значение2 - до 9 байтов, а значение3 - до 21 байта.

Значение, полученное с сервера, составляет всего 8 байт, значение1 составляет 2 байта, значение2 составляет 2 байта, а значение3 составляет 4 байта.

Пожалуйста, дайте мне знать, как его применить.

Я жду вашей помощи.

Буду признателен, если вы дадите мне URL-адрес для ссылки.

- (void) sendMessage {
    
    //NSString *response  = [NSString stringWithFormat:@"msg:%@", _dataToSendText.text];
    
    NSString *response  = @"123";
    NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]];
    [outputStream write:[data bytes] maxLength:[data length]];
    
}

- (void) messageReceived:(NSString *)message {
    
    [messages addObject:message];
    NSLog(@"%@", message);
}

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {
    
    NSLog(@"stream event %lu", streamEvent);
    
    switch (streamEvent) {
            
        case NSStreamEventOpenCompleted:
            NSLog(@"Stream opened: %@", theStream);
            break;
            
        case NSStreamEventHasBytesAvailable:
            NSLog(@"can read: %@", theStream);
            
            if (theStream == inputStream)
            {
                uint8_t buffer[8];
                NSInteger len;
                
                while ([inputStream hasBytesAvailable])
                {
                    len = [inputStream read:buffer maxLength:sizeof(buffer)];
                    if (len > 0)
                    {
                        //NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
                        
                        
                        NSMutableData* data=[[NSMutableData alloc] initWithLength:0];
                        [data appendBytes: (const void *)buffer length:len];
                        NSString *output = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
                       
                        
                        if (nil != output)
                        {
                            NSLog(@"server said: %@", output);
                            [self messageReceived:output];
                        }
                    }
                }
            }
            break;
            
        case NSStreamEventHasSpaceAvailable:
            NSLog(@"can write: %@", theStream);
            break;
            
        case NSStreamEventErrorOccurred:
            NSLog(@"Error : %@",[theStream streamError].localizedDescription);
            break;
            
        case NSStreamEventEndEncountered:
            NSLog(@"end encountered: %@", theStream);
            
            
            [theStream close];
            [theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
            //_connectedLabel.text = @"Disconnected";
            NSLog(@"Disconnected");
            NSLog(@"close stream");
            break;
        default:
            NSLog(@"Unknown event");
    }
    
}

- (void)connectToServer {
    
    NSLog(@"Setting up connection to %@ : %i", addr, port);
    CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (__bridge CFStringRef) addr, port, &readStream, &writeStream);
    
    messages = [[NSMutableArray alloc] init];
    [self open];
}

- (IBAction)disconnect:(id)sender {
    
    [self close];
}

- (void)open {
    
    NSLog(@"Opening streams.");
    
    outputStream = (__bridge NSOutputStream *)writeStream;
    inputStream = (__bridge NSInputStream *)readStream;
    
    [outputStream setDelegate:self];
    [inputStream setDelegate:self];
    
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    
    [outputStream open];
    [inputStream open];
    
    NSLog(@"Connected");
    
    //[self sendMessage];
}

- (void)close {
    NSLog(@"Closing streams.");
    [inputStream close];
    [outputStream close];
    [inputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [outputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [inputStream setDelegate:nil];
    [outputStream setDelegate:nil];
    inputStream = nil;
    outputStream = nil;
    
    NSLog(@"Disconnected");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...