iOS отправить команду на веб-сервер

Все,

У меня есть устройство OBDII, в котором есть веб-сервер. Я подключаюсь через Wi-Fi. Я хочу создать приложение для отправки команд и чтения данных, полученных с устройства.

Я сначала проверяю это с помощью терминала. Я подключаюсь через сеанс telnet и могу отправить команду (0104), и я получаю ответ. Это отлично работает.

Теперь я хочу создать приложение, чтобы сделать то же самое. Я знаю, что могу подключиться, используя:

- (void)initNetworkCommunication {
    CFReadStreamRef readStream;
    CFWriteStreamRef writeStream;
    CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"192.168.0.10", 35000, &readStream, &writeStream);
    inputStream = (NSInputStream *)readStream;
    outputStream = (NSOutputStream *)writeStream;
    [inputStream setDelegate:self];
    [outputStream setDelegate:self];

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

Связь работает нормально.
Затем я хочу отправить команду. Я использую это:

- (IBAction)sendCommand:(id)sender {
    NSString *response  = [NSString stringWithFormat:@"%@", commandText.text];
    NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]];
    [outputStream write:[data bytes] maxLength:[data length]];   
}

Но я не получаю правильный ответ, я получаю? назад. Таким образом, устройство не распознает команду...
Что я делаю неправильно? Это неправильный формат? Разве это не должна быть строка? Или он должен отличаться от ASCII?

Я уже пытался поставить \r в конце команды, но это не помогает.

2 ответа

Решение

Решение:

Отправьте данные с дополнением \r\n. Можно также изменить кодировку в кодировке UTF, но это не обязательно...

- (IBAction)sendCommand:(id)sender {
    NSString *response  = [NSString stringWithFormat:@"%@\r\n", commandText.text];
    NSLog(@"Response send: %@", response);
    NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSUTF8StringEncoding]];
    NSInteger bytesWritten = [outputStream write:[data bytes] maxLength:[data length]];

}

... имеет веб-сервер. Я подключаюсь через Wi-Fi...

В таком случае можно подумать, что лучшим решением будет решение на высоком уровне. использование NSURLRequest отправить ваш запрос и получить данные обратно в NSHTTPURLResponse, Пусть iOS позаботится о HTTP-вещании для вас. Если это не сработает, то сервер вашего устройства нельзя назвать веб-сервером.

Другие вопросы по тегам