全て、
Web サーバーを搭載した OBDII デバイスを使用しています。wifi経由で接続しています。コマンドを送信し、デバイスから受信したデータを読み取るアプリを作成したいと考えています。
最初にターミナルを使用してテストします。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を追加しようとしましたが、これは役に立ちません。