iPhoneでNSInputStream/NSOutputStreamを使ってTCP通信を行うことはできますか? Apple がドキュメントで提供している例では [NSStream getStreamsToHost] を使用していますが、これは iPhone ではサポートされていません。CFStream を使用してソケットをセットアップし、NSStream にブリッジする他の投稿を見たことがありますが、サポートされている唯一の方法ですか?
ドキュメントに基づくと、理論的には次のように機能するはずです。
//input stream
NSURL *url = [[NSURL alloc] initWithString:@"10.252.1.1:8080"];
iStream = [NSInputStream inputStreamWithURL:url];
[iStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[iStream open];
oStream = [NSOutputStream outputStreamWithURL:url append:true];
[oStream setDelegate:self];
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[oStream open];
ただし、これには 2 つの問題があります。
1) iStream 部分だけを実行すると、デリゲートで呼び出されたイベントは表示されません。
2) outputStreamWithURL は、CFWriteStreamSetProperty 内からの不可解な「EXC_BAD_ACCESS」エラー メッセージで失敗します。