Считывание веса с весов в iOS, цель C - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть приложение для iOS в магазине приложений.Я работаю над некоторыми новыми функциями для него.Я работаю над машиной для взвешивания и требую зарегистрировать вес в системе, используя telnet соединение.Используя следующий код, я устанавливаю соединение telnet с весами

- (void)initNetworkCommunication {

uint portNo = 23;
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"227.3.4.56", portNo, &readStream, &writeStream);
inputStream = (__bridge NSInputStream *)readStream;

[inputStream setDelegate:self];

[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];}

Полученные данные в методе делегата

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {
uint8_t buffer[1024];
int len;

switch (streamEvent) {

    case NSStreamEventOpenCompleted:
        NSLog(@"Stream opened now");
        break;
    case NSStreamEventHasBytesAvailable:
        NSLog(@"has bytes");
        if (theStream == inputStream) {
            while ([inputStream hasBytesAvailable]) {
                len = [inputStream read:buffer maxLength:sizeof(buffer)];
                if (len > 0) {

                    NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];

                    if (nil != output) {
                        NSLog(@"server said: %@", output);
                    }
                }
            }
        } else {
            NSLog(@"it is NOT theStream == inputStream");
        }
        break;
    case NSStreamEventHasSpaceAvailable:
        NSLog(@"Stream has space available now");
        break;


    case NSStreamEventErrorOccurred:
        NSLog(@"Can not connect to the host!");
        break;


    case NSStreamEventEndEncountered:

        [theStream close];
        [theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

        break;

    default:
        NSLog(@"Unknown event %i", streamEvent);
}}

Весы непрерывно отправляют одни и те же данные за доли секунды, потому что этот поток заблокирован& не может выполнить дальнейший код.Чтобы избежать этой ситуации, я закрыл соединение с inputStream, как только я получу данные в первый раз в NSStreamEventHasBytesAvailable.

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {
uint8_t buffer[1024];
int len;

switch (streamEvent) {

    case NSStreamEventOpenCompleted:
        NSLog(@"Stream opened now");
        break;
    case NSStreamEventHasBytesAvailable:
        NSLog(@"has bytes");
        if (theStream == inputStream) {
            while ([inputStream hasBytesAvailable]) {
                len = [inputStream read:buffer maxLength:sizeof(buffer)];
                if (len > 0) {

                    NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];

                    if (nil != output) {
                        NSLog(@"server said: %@", output);

                        [theStream close];
                        [theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
                   }
                }
            }
        } else {
            NSLog(@"it is NOT theStream == inputStream");
        }
        break;
    case NSStreamEventHasSpaceAvailable:
        NSLog(@"Stream has space available now");
        break;


    case NSStreamEventErrorOccurred:
        NSLog(@"Can not connect to the host!");
        break;


    case NSStreamEventEndEncountered:

        [theStream close];
        [theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

        break;

    default:
        NSLog(@"Unknown event %i", streamEvent);
}}

Постановка задачи

После закрытия соединения, когдаЯ пытаюсь получить данные в следующий раз, после переподключения, он всегда дает пустой ответ и соединение закрывается.Мне нужны данные, когда я делаю переподключение всегда.Пожалуйста, руководство

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...