簡體   English   中英

iOS將命令發送到Web服務器

[英]iOS send command to web server

所有,

我有一個帶Web服務器的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放在命令末尾,但這無濟於事。

解:

發送帶有附加\\ 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]];

}

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

如果是這樣,那么人們會認為最好的解決方案是高級解決方案。 使用NSURLRequest發送您的請求,並在NSHTTPURLResponse獲取數據。 讓iOS為您處理HTTP事務。 如果那不起作用,那么您設備的服務器就不能真正稱為Web服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM