1

我能够将文件从一台移动设备传输到另一台移动设备。当发送方发送这个 8 字节的文本文件时,接收方将变成一个 256 字节的 txt 文件,当我打开 txt 文件的内容时,有我的信息和很多方框。这是来自发件人的我的代码:

            string fileName = @"SendTest.txt";
            System.Uri uri = new Uri("obex://" + selectedAddr + "/" + System.IO.Path.GetFileName(fileName)); 
            ObexWebRequest request = new ObexWebRequest(uri);

            Stream requestStream = request.GetRequestStream(); 
            FileStream fs = File.OpenRead(fileName);

            byte[] buffer = new byte[1024]; 
            int readBytes = 1;

            while (readBytes != 0) 
            {
            readBytes = fs.Read(buffer,0, buffer.Length);
            requestStream.Write(buffer,0, readBytes);
            }

            requestStream.Close();
            ObexWebResponse response = (ObexWebResponse)request.GetResponse();
            MessageBox.Show(response.StatusCode.ToString());
            response.Close();

Any1知道我该如何解决?

4

3 回答 3

1

似乎 256 字节是蓝牙会话中的最小数据包大小。由于您的文件大小小于 256 字节,因此有效负载中填充了一些特殊字符。尝试读取 256 字节数组,直到 EOF (^z) 字符,并将字节只读取到 EOF 并保存到磁盘。您需要丢弃有效载荷。

于 2010-06-01T05:01:59.640 回答
0

无论如何,我使用以下方法解决了错误:

字符串文件名 = @"SendTest.txt";

字符串 adr = "0025677FB346";

Uri uri = new Uri("obex://" + adr + "/" + System.IO.Path.GetFileName(fileName));

ObexWebRequest 请求 = 新 ObexWebRequest(uri);

request.ReadFile(fileName);

ObexWebResponse 响应 = (ObexWebResponse)request.GetResponse();

MessageBox.Show(response.StatusCode.ToString());

响应。关闭();

于 2010-06-03T06:55:10.890 回答
0

因此,当您向代码示例添加一些调试时,readBytes在 Read 调用之后添加转储,您会看到什么?8 然后 0 单独?

如果你的文件是什么语言?例如西方语言还是东方语言?

文件前后的内容是什么?添加了哪些字节以及在哪里添加?

于 2010-06-01T18:21:15.230 回答