Как отправить изображение через Bluetooth с ПК на Android с помощью C # - PullRequest
0 голосов
/ 02 марта 2012

Я могу сделать передачу данных между ПК и Android через Bluetooth. Но теперь я хочу отправить файлы изображений размером около 80 КБ. Когда я отправляю изображение, передается только его часть, но не полностью. Кто-нибудь знает, как этого добиться? Я использую TCP и работаю на платформе 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();

            }
        }

1 Ответ

1 голос
/ 05 марта 2012

Преобразование двоичного объекта сначала в строку, а затем преобразование его в UTF-8 не очень хорошая идея ... В преобразованиях может произойти много плохих вещей.(И есть также ошибка в sendMessage.)

Почему бы просто не сделать:

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

Если вам действительно нужен последний "\ n", то добавьте перед Flush:

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

Пока мы обсуждаем UTF-8, почему вы предполагаете, что имя файла будет содержать только символы ASCII ??Измените этот код на:

byte[] fileNameByte = Encoding.UTF8.GetBytes(fileName);
...