2012-12-31 66 views
3

编辑* 我在客户端服务器上成功了。现在我正在做两个模拟器之间的文件传输。该文件确实在模拟器之间传输,但我注意到收到的文件大小与原始文件不同。例如A.jpg的大小是900KB,但收到的文件小于900KB。我检查了文件传输大小,发现传输时丢失了一些数据(字节)。这是怎么发生的?Android Java TCP客户端服务器文件传输

下面的代码:

客户端(发送文件)

File myFile = new File ("/mnt/sdcard/Pictures/A.jpg"); 
FileInputStream fis = new FileInputStream(myFile); 
OutputStream os = socket.getOutputStream(); 
int filesize = (int) myFile.length(); 

byte [] buffer = new byte [filesize]; 
    int bytesRead =0; 
    while ((bytesRead = fis.read(buffer)) > 0) { 
    os.write(buffer, 0, bytesRead); 
//Log display exact the file size 
    System.out.println("SO sendFile" + bytesRead); 
    } 
    os.flush(); 
    os.close(); 
    fis.close(); 
    Log.d("Client", "Client sent message"); 
    socket.close(); 

服务器(接收文件)

FileOutputStream fos = new FileOutputStream("/mnt/sdcard/Pictures/B.jpg"); 
@SuppressWarnings("resource") 
BufferedOutputStream bos = new BufferedOutputStream(fos); 
InputStream is = clientSocket.getInputStream(); 

byte[] aByte = new byte[1024]; 
int bytesRead; 
while ((bytesRead = is.read(aByte)) != -1) 
{ 
    bos.write(aByte, 0, bytesRead); 
//Log display few parts the file size is less than 1024. I total up, the lost size caused the file received is incomplete 
    System.out.println("SO sendFile" + bytesRead); 
} 
clientSocket.close(); 

*编辑2

虽然我上网周围谷歌,我发现.read(缓冲区)不保证读取文件的全部大小(字节)。因此,收到的文件总是会丢失一些字节(如空格,空字符)。为了解决这个问题,首先发送文件大小通知接收者,然后才开始传输文件。

回答

1

NetworkOnMainThreadException,因为你必须使用AsyncTask

NullPointerException发生,因为你要使用PrintWriter与插座的结果。由于你对套接字一无所知,你会得到这个错误。

+0

感谢您的建议。我已经完成了客​​户端 - 服务器部分,现在我遇到了文件传输问题,如上所述,您可以查看一下吗?再次感谢你。 –

+0

确定让他们看看它.. :) – Vinay

+0

您的图像是完美的文件传输后,或有任何问题像失去了几个像素? – Vinay

0

NetworkOnMainThreadException告诉你你做错了什么。

你需要把网络的东西放入一个单独的线程(或AsyncTask或类似的)。发生

+0

感谢您的咨询。我已经完成了客​​户端 - 服务器部分,现在我遇到了文件传输问题,如上所述,您可以查看一下吗?再次感谢你。 –

0

您不能在Android中的主线程上调用任何服务器操作。 在Android O.S 4.0及以上版本中,这将直接导致NetworkOnMainThreadException。您有2个选择:

1)要么使用AsyncTask来调用您的每个服务器操作。

2)或使用用户定义线程适用于任何类型的服务器操作。

我也在为这个异常苦苦挣扎,只能在操作系统版本4.0以上的设备上使用,所以你不能忽略Android的这些小需求。

+0

感谢您的建议。我已经完成了客​​户端 - 服务器部分,现在我遇到了文件传输问题,如上所述,您可以查看一下吗?再次感谢你。 –