如何使用C#通过蓝牙从PC向Android发送图像

时间:2012-03-02 15:29:47

标签: c# file bluetooth transfer

我可以通过蓝牙在PC和Android之间进行数据传输。但现在我想发送大小约为80KB的图像文件。当我发送图像时,只有一部分被转移而不是 完全。有谁知道如何实现这一目标?我正在使用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 个答案:

答案 0 :(得分:1)

首先将二进制对象转换为字符串,然后将其转换为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);