我可以通过蓝牙在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();
}
}
答案 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);