2014-02-24 8 views
1

Все,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]]; 
} 

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

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

ответ

1

Отправить данные с добавлением \ 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]]; 

} 
0

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

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