今天写的文件传输,但是只能是部分传,在传输的最后总有部分数据丢失,导致文件损坏,各位大虾帮忙看看啊
谢先Server端:
Thread t=new Thread(new Runnable(){ //使用线程,防止阻塞
public void run(){
try{
jTextField4.setText("开始发送文件!");//标记
String temp;
PrintWriter putout;
BufferedReader in=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
temp=in.readLine().trim(); //从bufferReader中按行读取
putout=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
while(temp!=null)
{
putout.println(temp);
temp=in.readLine().trim();//写入printWriter
}
jTextField4.setText("文件发送完毕!");
}catch(IOException e)
{
System.out.println(e);
}
}
});
t.start(); Client端
File file=new File(s); //从指定路径创建文件
try{
if(!file.exists())
{
file.createNewFile();
}
PrintWriter out =new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(file))),true);
String temp; temp=in.readLine().trim();
jTextField4.setText("正在接收文件...");
while(temp!=null)
{
out.print(temp);
out.flush();
temp=in.readLine().trim();
} jTextField4.setText("文件接收完毕!");
}catch(IOException e)
{
System.out.println(e);
}请大家帮忙看下这个程序出什么问题了呀··谢谢~~非常之谢谢
谢先Server端:
Thread t=new Thread(new Runnable(){ //使用线程,防止阻塞
public void run(){
try{
jTextField4.setText("开始发送文件!");//标记
String temp;
PrintWriter putout;
BufferedReader in=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
temp=in.readLine().trim(); //从bufferReader中按行读取
putout=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
while(temp!=null)
{
putout.println(temp);
temp=in.readLine().trim();//写入printWriter
}
jTextField4.setText("文件发送完毕!");
}catch(IOException e)
{
System.out.println(e);
}
}
});
t.start(); Client端
File file=new File(s); //从指定路径创建文件
try{
if(!file.exists())
{
file.createNewFile();
}
PrintWriter out =new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(file))),true);
String temp; temp=in.readLine().trim();
jTextField4.setText("正在接收文件...");
while(temp!=null)
{
out.print(temp);
out.flush();
temp=in.readLine().trim();
} jTextField4.setText("文件接收完毕!");
}catch(IOException e)
{
System.out.println(e);
}请大家帮忙看下这个程序出什么问题了呀··谢谢~~非常之谢谢
把代码发给我.我也来调一调
[email protected]
没有循环处理语句,只能读取文件的一行内容,所以文件发送不完整。
楼主可以用你上面的代码试着发一些很小的文件,例如只有几个字符的txt,你会发现客户端怎么都收不到,这是因为缓冲区在写满了之后才会网客户端发送,缓冲区一直不满,服务器又不主动清空缓冲区,就是这种结果。解决:
方法一:PrintWriter有一个构造方法,可以设置是否自动刷新缓冲区,查api
方法而:发送后主动调用flush()刷新缓冲区