2014-02-24 104 views
1

全部,iOS發送命令到網絡服務器

我有一個OBDII設備,它有一個網絡服務器。我通過wifi連接。 我想創建一個應用程序來發送命令並讀取從設備收到的數據。

我首先使用Terminal進行測試。我使用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放在命令的末尾,但這並沒有幫助。

回答

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

...中有一個網絡服務器。我通過wifi連接...

如果是這樣的話,人們會認爲最好的解決方案將是一個高層次的解決方案。使用NSURLRequest發送您的請求,並將數據重新寫入NSHTTPURLResponse。讓iOS照顧你的HTTP資料。如果這不起作用,那麼你的設備的服務器不能稱爲Web服務器。