Fw: [問題] android與PC間傳檔不完全

看板java作者 (神手)時間13年前 (2012/06/25 10:16), 編輯推噓0(006)
留言6則, 2人參與, 最新討論串1/1
※ [本文轉錄自 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

06/25 10:19, , 1F
用PrintStream就是錯誤的第一步了.除非你只傳文字檔
06/25 10:19, 1F

06/25 10:22, , 2F
感謝你的回答 那我應該用哪一種方式?
06/25 10:22, 2F

06/25 10:23, , 3F
再看了一下,你PrintStream用在android一方,問題不大,問題
06/25 10:23, 3F

06/25 10:24, , 4F
出在你接收端的skt一魚給兩貓吃,第二隻貓沒吃到全部的魚身
06/25 10:24, 4F

06/25 10:27, , 5F
總之除了BufferIn(Out)putStream之外,不要再包其它東西才
06/25 10:27, 5F

06/25 10:29, , 6F
能確保單純化,無文字分行字元困擾.也不要一魚餵兩貓
06/25 10:29, 6F
文章代碼(AID): #1FvydzMv (java)