2011-11-12 14 views
1

私は内蔵のHTTPサーバーを含むアプリケーションを作っています。私はソケットを介してPNGイメージを送信する必要がありますが、何とかそれが混乱していると画像が表示されません。これは私のコードです(AsyncSocketsを使用しています):Cocoaソケットで整形式のHTTP応答を送信するにはどうすればいいですか?

if(processingURL == FALSE) { 

     NSString *filePath = [[NSString alloc] initWithFormat:@"%@/Contents/Resources/public%@",[self getApplicationPath], [request objectAtIndex:1]]; 
     //NSLog(@"%@", filePath); 


     if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { 
      contententType = @"image/png"; 
      responseCode = @"200 OK"; 
     // responseBody = [[NSString alloc] initWithData:[[NSFileManager defaultManager] contentsAtPath:filePath] encoding:NSASCIIStringEncoding]; 

      NSData * content = [[NSData alloc] initWithContentsOfFile:filePath]; 

      responseBody = [[NSString alloc] initWithData:content encoding:NSASCIIStringEncoding]; 

      NSLog(@"%@",responseBody); 

     } 
    } 

    data = [[NSString stringWithFormat:@"HTTP/1.1 %@\nContent-Type: %@\n\n\n %@", responseCode, contententType, responseBody] dataUsingEncoding:NSUTF8StringEncoding]; 


    [sock writeData:data withTimeout:-1 tag:0]; 

私は間違っていますか?

+0

部分パスを文字列連結メソッドまたは 'stringWithFormat:'と一緒にステイプルするのではなく、バンドルにイメージのパスまたはURLを問い合わせる必要があります。 –

+0

また、出力を生成する際に、実際にファイルを見つけて読み取ったかどうかにかかわらず、 "contententType"と "responseBody"を持っていると仮定して、結果を割り当てます。 –

+0

こんにちはPeter Hosey。私は何かが失敗した場合に備えて、そのコードの前にデフォルトで自分のボディとヘッダーを設定します。 – pmerino

答えて

1
responseBody = [[NSString alloc] initWithData:content encoding:NSASCIIStringEncoding]; 

:)おかげでテキストとして任意のファイル・コンテンツデータを処理しないでください、私はこの問題は、不正な形式でレスポンス、だと思うが、私は知りません。そうではありません。

PNGはASCIIテキストファイルではありません。バイナリデータが含まれているため、そのように扱わなければなりません。つまり、NSDataをそのままにして、NSStringのテキストに変換したり、テキストとして解釈しようとすることはありません。

作成する必要がある文字列は、応答コードとヘッダーのみです。その文字列からデータを生成し、ファイルのデータを連結してサーバーに送信します。

+0

私はあなたを愛しています、ピーター・ホーシー...あなたは明らかに(私が知りたい)すべてを知っていますが、あなたは他の賢者のように、オールド・ダム、あなたは好きですあなたの推測を維持するために、あなたの記事の終わりに、私はいつも自分の席に座っています。そして、あなたはこれと他のことをするようなものです。それは私が知りたかったものです。この場合、「その文字列からデータを生成し、そのデータをファイルに連結してサーバーに送信します。私はちょうどあなたのチョップを破っている - 私はいつもあなたがより詳細な応答で返信することを感謝します。乾杯。 –

関連する問題