2012-03-02 13 views
-3

PCとAndroidの間でブルートゥースを使ってデータ転送ができます。しかし、今私は約80キロバイトのサイズの画像ファイルを送信したい。画像を送信すると、その一部だけが転送されますが、 は完全に転送されません。誰もそれを達成する方法を知っていますか?私はTCPを使用しており、C#プラットフォームで作業しています。PCからAndroidでC#を使って画像を送る方法

 string fileName = "send.png"; 

     string filePath = @"C:\Users\Asus 53s\Desktop\";  //path 
     byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName); 

     byte[] fileData = File.ReadAllBytes(filePath + fileName); 
     byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length]; 
     byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length); 
     fileNameLen.CopyTo(clientData,0); 
     fileNameByte.CopyTo(clientData,4); 
     fileData.CopyTo(clientData,4+fileNameByte.Length); 

     sendMessage(clientData); 

       } 

    public Boolean sendMessage(byte[] msg) 
    { 

     { 
      if (!msg.Equals("")) 
      { 
       UTF8Encoding encoder = new UTF8Encoding(); 
       NetworkStream stream = me.GetStream(); 
       stream.Write(encoder.GetBytes(msg + "\n"), 0, (msg).Length); 

       stream.Flush(); 

      } 
     } 
+0

誰もが何が間違っているのかも知れないと思いますか? – Lloyd

+0

申し訳ありませんが、私は今使用しているコードを貼り付けました。 – ragz

+0

受信するイメージの量。小さな塊で送る必要があるかもしれません。あなたのコードがうまくいかない理由を理解するために何をしましたか?ブルートゥースのリビジョンによっては、かなり信頼できない場合があります。 –

答えて

1

文字列に最初のバイナリオブジェクトを変換してからUTF-8に変換は良いアイデアではありません...悪い事の多くは、変換中に発生する可能性があります。 (そしてまたsendMessageにバグがあります。)

なぜだけではなく、実行します。

public Boolean sendMessage(byte[] msg) 
{ 
    stream.Write(msg, 0, msg.Length); 
    stream.Flush(); 
} 

あなたが本当に最後の "\ nは"、そしてフラッシュの前に追加することが必要な場合:

stream.WriteByte((byte)'\n'); 

UTF-8の主題については、ファイル名にはASCII文字しか含まれていないと思われますか?そのコードを次のように変更してください:

byte[] fileNameByte = Encoding.UTF8.GetBytes(fileName); 
関連する問題