【发布时间】:2012-10-15 05:12:15
【问题描述】:
我想通过socket从Android发送一个大文件到服务器,但是服务器接收到的文件不完整。
android 上的代码:
Socket client = new Socket(ipStr, 4444);
OutputStream outputStream = client.getOutputStream();
FileInputStream fileInputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
byte[] buffer = new byte[512];
byte[] sendLen = getBytes(file.length(), true);
outputStream.write(sendLen);
outputStream.flush();
int count;
while ((count = fileInputStream.read(buffer)) > 0)
{
outputStream.write(buffer, 0, count);
}
outputStream.flush();
bufferedInputStream.close();
outputStream.close();
client.close();
服务器上的代码:
byte[] recvHead = new byte[8];
inStream.read(recvHead, 0, 8);
long recvLength = getLong(recvHead, false);
FileOutputStream file = new FileOutputStream(fileName, false);
byte[] buffer = new byte[8192];
int count = 0;
while (count < recvLength) {
int n = inStream.read(buffer);
if(n == -1)
break;
file.write(buffer, 0, n);
count += n;
}
但是服务器会阻塞在read(buffer)中(android发送的文件大约30M)。
奇怪的是: 当我在发送文件时向文件添加输出时,服务器可以正常工作。
FileOutputStream file2 = new FileOutputStream("/sdcard/testfile" , false);
while ((count = fileInputStream.read(buffer)) >= 0)
{
outputStream.write(buffer, 0, count);
outputStream.flush();
file2.write(buffer, 0, count);
file2.flush();
}
谁能帮我解决这个问题?谢谢!
【问题讨论】:
标签: android sockets streamwriter