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-вещании для вас. Если это не сработает, то сервер вашего устройства нельзя назвать веб-сервером.