900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > android+蓝牙+文件传输 蓝牙文件传输Android

android+蓝牙+文件传输 蓝牙文件传输Android

时间:2024-03-12 12:12:03

相关推荐

android+蓝牙+文件传输 蓝牙文件传输Android

我在通过蓝牙套接字发送大文件时遇到问题.较小的文件正确传输.我相信正确传输高达161280字节.

编辑:我做了一些测试并缩小了原因.看起来

outStream.write(mybytearray, 0, mybytearray.length);

在发送代码部分不写超过161280字节.我通过不关闭套接字连接看到了这种行为,从而导致接收部分中的读取在161280字节上“阻塞”.这里的蓝牙输出流有什么问题?我究竟做错了什么?

编辑2:

这样做可以让它通过.

for(int i = 0 ; i < mybytearray.length ; i++){

outStream.write(mybytearray[i]);

}

发送代码:

try {

outStream = mBluetoothSocket.getOutputStream();

Log.d(TAG,"outStream created success!");

} catch (IOException e) {

Log.d(TAG,

"ON RESUME: Output stream creation failed.",

e);

}

File myFile = new File(file_name);

Log.d(TAG,"file /source.pdf created success!");

byte[] mybytearray = new byte[(int)myFile.length()];

Log.d(TAG,"file length() =" + (int)myFile.length());

FileInputStream fis = new FileInputStream(myFile);

Log.d(TAG,"fis created");

BufferedInputStream bis = new BufferedInputStream(fis,1272254 );

Log.d(TAG,"bis created success");

bis.read(mybytearray,0,mybytearray.length);

Log.d(TAG,"ALL Bytes read from bis");

outStream.write(mybytearray, 0, mybytearray.length);

Log.d(TAG,"BYTES WRITTEN to OUTSTREAM of socket");

outStream.flush();

Log.d(TAG,"bytes flushed");

outStream.close();

收货代码:

// Attach the i/p stream to the socket

try {

InputStream in = socket.getInputStream();

mIn = in;

Log.d(TAG, "input stream acquired");

} catch (IOException e1) {

e1.printStackTrace();

}

// Create output streams & write to file

FileOutputStream fos = new FileOutputStream(

Environment.getExternalStorageDirectory()

+ "/copy.pdf");

try {

bytesRead = mIn.read(buffer, 0, buffer.length);

Log.d(TAG, "bytesRead first time =" + bytesRead);

current = bytesRead;

do {

Log.d(TAG, "do-while -- current: " + current);

bytesRead = mIn.read(buffer, current,

buffer.length - current);

Log.d(TAG, "bytesRead: =" + bytesRead);

if (bytesRead >= 0)

current += bytesRead;

} while (bytesRead > -1);

} catch (IOException e) {

e.printStackTrace();

Log.d(TAG, "do while end:-- buffer len= "

+ buffer.length + " current: " + current);

fos.write(buffer);

Log.d(TAG, "fos.write success! buffer: "

+ buffer.length + " current: " + current);

fos.flush();

fos.close();

}

}

socket.close();

logcat的:

D/ReceiveService( 5761): do-while -- current: 155232

D/ReceiveService( 5761): bytesRead: =1008

D/ReceiveService( 5761): do-while -- current: 156240

D/ReceiveService( 5761): bytesRead: =1008

D/ReceiveService( 5761): do-while -- current: 157248

D/ReceiveService( 5761): bytesRead: =1008

D/ReceiveService( 5761): do-while -- current: 158256

D/ReceiveService( 5761): bytesRead: =1008

D/ReceiveService( 5761): do-while -- current: 159264

D/ReceiveService( 5761): bytesRead: =1008

D/ReceiveService( 5761): do-while -- current: 160272

D/ReceiveService( 5761): bytesRead: =1008

D/ReceiveService( 5761): do-while -- current: 161280

W/System.err( 5761): java.io.IOException: Software caused connection abort

W/System.err( 5761): at android.bluetooth.BluetoothSocket.readNative(Native Method)

W/System.err( 5761): at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:307)

W/System.err( 5761): at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96)

W/System.err( 5761): at com.bt.server.ReceiveService$AcceptThread.run(ReceiveService.java:141)

我正在使用摩托罗拉里程碑. Android 2.1

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。