所有
我有一个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放在命令的末尾,但这没有帮助。
答案 0 :(得分:1)
解决方案:
使用add \ 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]];
}
答案 1 :(得分:0)
...里面有一个网络服务器。我通过wifi连接...
如果是这样,人们会认为最好的解决方案是高级解决方案。使用NSURLRequest
发送您的请求,然后在NSHTTPURLResponse
中重新获取数据。让iOS为您处理HTTP内容。如果这不起作用,那么您设备的服务器实际上不能称为网络服务器。