作者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
1F:→ bitlife:用PrintStream就是错误的第一步了.除非你只传文字档 06/25 10:19
2F:→ gs9706:感谢你的回答 那我应该用哪一种方式? 06/25 10:22
3F:→ bitlife:再看了一下,你PrintStream用在android一方,问题不大,问题 06/25 10:23
4F:→ bitlife:出在你接收端的skt一鱼给两猫吃,第二只猫没吃到全部的鱼身 06/25 10:24
5F:→ bitlife:总之除了BufferIn(Out)putStream之外,不要再包其它东西才 06/25 10:27
6F:→ bitlife:能确保单纯化,无文字分行字元困扰.也不要一鱼喂两猫 06/25 10:29