作者gs9706 (神手)
看板java
標題Fw: [問題] android與PC間傳檔不完全
時間Mon Jun 25 10:16:28 2012
※ [本文轉錄自 AndroidDev 看板 #1Fvycx8T ]
作者: gs9706 (神手) 看板: AndroidDev
標題: [問題] android與PC間傳檔不完全
時間: Mon Jun 25 10:15:20 2012
小弟我目前在做一個android與pc的client-server架構之傳檔程式
android為client
pc為server
在android傳檔到PC的情況下
模擬器測試結果正常
但實機測試卻產生資料遺失的情況(原檔132KB 傳過去變131KB)
導致檔案損毀
以下是我android的程式碼
File file = new File(SDCardpath.getAbsolutePath()+"/"+filename);
PrintStream printStream = new PrintStream(socket.getOutputStream());
printStream.println(file.getName());
BufferedInputStream inputStream = new BufferedInputStream
(new FileInputStream(file));
int readin;
while((readin = inputStream.read()) != -1) {
printStream.write(readin);
}
printStream.flush();
printStream.close();
inputStream.close();
socket.close();
我懷疑是第3行我先傳file.getName()才會導致這個問題
以下是java的程式碼
int port = Integer.parseInt(args[0]);
System.out.println("Server IP"+InetAddress.getLocalHost().getHostAddress());
System.out.println("簡易檔案接收...");
System.out.printf("將接收檔案於連接埠: %d%n", port);
ServerSocket ssocket = new ServerSocket(port);
while(true) {
System.out.println("傾聽中....");
Socket skt = ssocket.accept();
System.out.printf("與 %s 建立連線%n",skt.getInetAddress().toString());
BufferedReader filename = new BufferedReader
(new InputStreamReader(skt.getInputStream()));
BufferedInputStream in = new BufferedInputStream(skt.getInputStream());
BufferedOutputStream out = new BufferedOutputStream
(new FileOutputStream(filename.readLine())); //接收android第3行傳來的檔案
//名稱,然後開檔
int readin;
while((readin = in.read()) != -1)
{
out.write(readin);
Thread.yield();
}
out.flush();
out.close();
in.close();
skt.close();
System.out.println("\n檔案接收完畢!");
}
不知道怎麼修正這問題
懇請各位大大幫忙
感謝~~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.213.3
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 轉錄者: gs9706 (140.115.213.3), 時間: 06/25/2012 10:16:28
→ bitlife:用PrintStream就是錯誤的第一步了.除非你只傳文字檔 06/25 10:19
→ gs9706:感謝你的回答 那我應該用哪一種方式? 06/25 10:22
→ bitlife:再看了一下,你PrintStream用在android一方,問題不大,問題 06/25 10:23
→ bitlife:出在你接收端的skt一魚給兩貓吃,第二隻貓沒吃到全部的魚身 06/25 10:24
→ bitlife:總之除了BufferIn(Out)putStream之外,不要再包其它東西才 06/25 10:27
→ bitlife:能確保單純化,無文字分行字元困擾.也不要一魚餵兩貓 06/25 10:29