2011-07-17 7 views
2

iOSアプリケーションをBonjourを使用しHTTPコマンドを使用するサーバーと通信させようとしています。これまでのところ、私はローカルドメインを見つけて、私が探している特定のサービスを見つけることができました。私はサービスのアドレスを解決することができますが、アドレスから有用なものを得る方法はわかりません。 NSNetServiceからのアドレスはNSDataオブジェクトであり、私はそれをどうすればいいのか分かりません。 GETやPUTのようなコマンドを送る必要があります。このようなものを扱うココアのクラスは何ですか?Cocoa Touch Bonjour NSNetServiceアドレスとuint8_tを処理する方法

また、サービスからの入出力ストリームを取得しようとしましたが、それらは極端に低いレベルのストリームであるように見えますが、バッファやそのすべてを正しく処理する方法がわかりません。

NSOutputStream書き込みメソッドは、作成方法がわからないuint8_tバッファを取ります。 NSInputStreamのreadメソッドはuint8_tバッファを返しますが、どのように解釈するのか分かりません。

ターミナルコマンドを使用してこのサーバーと通信できます。例えば、コマンドLISTを送ると、探しているファイルのリストが表示されます。 Cocoaでこのような情報をどのように送信して取得するのですか?

+0

このようなものを扱う方法を誰も知らない場合は、他にどのようにCocoa Touchでサーバー通信を行うことができますか? – markv12

答えて

3

ので、それをサーバに送信し、出力ストリームにデータを書き込むには:

NSString * stringToSend = @"Hello World!\n"; //The "\n" lets the receiving method described below function correctly. I don't know if you need it or not. 
NSData * dataToSend = [stringToSend dataUsingEncoding:NSUTF8StringEncoding]; 
if (outputStream) { 
    int remainingToWrite = [dataToSend length]; 
    void * marker = (void *)[dataToSend bytes]; 
    while (0 < remainingToWrite) { 
     int actuallyWritten = 0; 
     actuallyWritten = [outputStream write:marker maxLength:remainingToWrite]; 
     remainingToWrite -= actuallyWritten; 
     marker += actuallyWritten; 
    } 
} 

あなただけNSDataオブジェクトに入れて、このように任意のデータを送信することができます。 Apple's CocoaEcho Sample Codeを見てみましょう

- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)streamEvent { 
    NSInputStream * istream; 
    NSOutputStream * ostream; 
    switch(streamEvent) { 
     case NSStreamEventHasBytesAvailable:; 
      istream = (NSInputStream *)aStream; 
      ostream = (NSOutputStream *)CFDictionaryGetValue(connections, istream); 

      uint8_t buffer[2048]; 
      int actuallyRead = [istream read:(uint8_t *)buffer maxLength:2048]; 
      if (actuallyRead > 0) { 
       NSData *data; 
       data = [NSData dataWithBytes:buffer length:actuallyRead]; 
       NSString *string = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]autorelease]; 
       string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""]; 
       //Do something with the string... 
      } 
       break; 
     case NSStreamEventEndEncountered:; 
      istream = (NSInputStream *)aStream; 
      ostream = nil; 
      if (CFDictionaryGetValueIfPresent(connections, istream, (const void **)&ostream)) { 
       [self shutdownInputStream:istream outputStream:ostream]; 
      } 
       break; 
     case NSStreamEventHasSpaceAvailable: 
     case NSStreamEventErrorOccurred: 
     case NSStreamEventOpenCompleted: 
     case NSStreamEventNone: 
     default: 
      break; 
    } 
} 

:入力ストリームのNSStreamDelegateで、サーバの使用から、このコードをデータを受信する

。それはあなたを助けるはずです。

関連する問題