telnet サーバー (必要に応じて AMX で NetLinx を実行) に接続し、ターミナルを開いて "telnet (アドレス)" を実行し、コマンドの入力を開始したかのようにいくつかのコマンドを送信しようとしています。メッセージを受信できますが、 http: //www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server のチュートリアルから見つけたこのコードを使用してメッセージを送信できません:
- (void)sendMessage: (NSString*) message{ //called when the user interacts with UISwitches, is supposed to send message to server
NSData *data = [[NSData alloc] initWithData:[message dataUsingEncoding:NSASCIIStringEncoding]]; //is ASCIIStringEncoding what I want?
[outputStream write:[data bytes] maxLength:[data length]];
NSLog(@"Sent message to server: %@", message);
}
- (void)initNetworkCommunication { //called in viewDidLoad of the view controller
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"192.168.1.90", 23, &readStream, &writeStream); //192.168.1.90 is the server address, 23 is standard telnet port
inputStream = (__bridge NSInputStream *)readStream;
outputStream = (__bridge NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
}
ある種のメッセージをサーバーに送信しているように見えますが、形式が間違っている可能性があります。私の推測では、文字列の書式設定の問題です。Telnet に使用したいのは ASCII ですか? コマンドを送信したときに表示されるメッセージを取得し、telnet を実行しているターミナルにそのメッセージを貼り付けると、サーバーはコマンドを受信して正常に処理します。
送信しようとしているコマンドの例を次に示します: SEND_STRING dvJAND,"'#AUX2=0',$0D"
もう1つの謎は、入力ストリームを読み取って印刷すると、上記が送信されたときに次のように表示されることです。
2013-08-20 00:20:23.791 [7548:907] server said: S
2013-08-20 00:20:23.793 [7548:907] server said: END_STRING dvJAND,"'#AUX
2013-08-20 00:20:23.795 [7548:907] server said: 2=0',$0D"
しかし、ターミナルでそのコマンドを入力すると、サーバーはまったく応答せず、本来の仕事をします。