2012-02-24 7 views
0

私は単純なプロキシサーバーを作成しています。.NETソケットの画像をエンコードする方法

ÿØÿà 

Iを得る:

���� 

私はデータを格納する文字列を使用している私が直面しています問題は、私は、代わりに取得する画像(最初の4バイト)を要求したときということです。私はcharの代わりにバイトを使用する必要がありますか?

  System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder(); 
      int charLen = d.GetChars(socketData.dataBuffer, 0, iRx, chars, 0); 

は、誰もが正しい方向に私を指すことができますしてください:

私は、これは私がonRecieveコールバックで持っているもので、非同期ソケットを使用していますか?

UPDATE:

私はsocketData.bufferの提案を使用しましたが、今私が得るすべては、数字、文字なしです。

  1. このように、socketData.bufferからすべてのデータを収集し、ブラウザにすべてのデータを
  2. ループリストを一覧にそれを配置し、書き出す::これは私がやっているものです

    私は取得しています
    Stream clientStream = client.GetStream(); 
    Stream outStream = clientStream; 
    StreamWriter myResponseWriter = new StreamWriter(outStream); 
    
    for(int i=0; i<myList.Count; i++){ 
        myResponseWriter.Write(myList[i]); 
    } 
    
    myResponseWrite.Flush(); 
    

出力が728484804749464932504848327975131067108105101110116583278101 ..です

EDIT2:

BinaryWriterは私の第2の問題を解決しました。

+6

エンコーディングはテキスト用ですが、イメージ用ではありません。代わりにバイト配列を使用してください。 –

+2

エンコーダ/デコーダでバイナリデータを渡すのはなぜですか? – Joe

+0

ありがとう!それ以外の方法でバイト配列に変換できますか? – user1015551

答えて

1

Convert.ToBase64String Methodとその逆のFromBase64Stringは、データを転送する方法であればバイト配列と文字列の間を移動するのに役立ちます。たとえば、プレーンテキストの電子メールに添付する予定の場合などです。

+0

残念ながら、base64を使用することはできません。なぜなら、base64decodeを実行する前にバッファ全体を構築する必要があるからです。データを「生きて」書く必要があります – user1015551

+0

Base64では、各6ビットグループは、印刷可能な64文字(各8ビット)の配列へのインデックスとして使用されます。したがって、4つのbase64でエンコードされたバイトはすべて3つの元のバイトにデコードできます。つまり、base64をデコードするために完全なホールドバッファ*を構築する必要はありません。あなたが必要とするのは、あなたのデコードを4バイトのブロックでチャンクし、Convert.FromBase64クラスに渡して変換を行うだけです。これは本質的にストリーミングされたデコードであり、ストリームを降順でBase64EncodedStreamにラップするのは良い考えです – Anastasiosyal

関連する問題