服务端:
importjava.io.BufferedInputStream;
importjava.io.DataInputStream;
importjava.io.DataOutputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
importjava.net.ServerSocket;
importjava.net.Socket;
publicclass Main {
publicstatic String path="E:\\project\\guaizhuo\\apk\\FlingGallery.apk";
publicstaticvoidmain(String[] args){
boolean cancel=false;
try {
ServerSocket socket=new ServerSocket(6502);
Socketclient=socket.accept();
InputStreamis=client.getInputStream();
ObjectInputStreamois=new ObjectInputStream(is);
DataOutputStream ps= new DataOutputStream(client.getOutputStream());
File file=new File(path);
String filename=file.getName();
long fileLen=file.length();
System.out.println(fileLen);/
ps.writeLong(fileLen);
int len=1024*5;//缓存大小
byte[] buf=newbyte[len];
int read=0;
DataInputStream fis= new DataInputStream(new BufferedInputStream(new FileInputStream(path)));
while(!cancel){
if(fis!=null){
if((read=fis.read(buf))!=-1){
ps.write(buf,0,read);
ps.flush();
cancel=ois.readBoolean();
}else{
break;
}
}else{
System.out.println("文件获取失败");/
break;
}
}
System.out.println("server文件下载结束");/
ps.close();
socket.close();
socket=null;
fis.close();
fis=null;
buf=null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端:
importjava.io.BufferedInputStream;
import java.io.BufferedOutputStream;
importjava.io.DataInputStream;
import java.io.DataOutputStream;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importjava.io.OutputStream;
importjava.net.InetSocketAddress;
importjava.net.Socket;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.net.Uri;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
publicclass DownLoadApp_TestActivity extends Activityimplements OnClickListener{
String path="/sdcard/guaizhuo/download/test.apk";
longlength=0;
File file;
booleancancel=false;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Buttonbtn=(Button)findViewById(R.id.button);
btn.setOnClickListener(this);
Buttonstop=(Button)findViewById(R.id.stop);
stop.setOnClickListener(newView.OnClickListener() {
publicvoid onClick(View arg0) {
cancel=true;
}
});
}
publicvoid onClick(View v) {
new Thread(){
publicvoid run(){
try{
Socketsocket=new Socket();
socket.connect(new InetSocketAddress("192.168.1.102",6502),2000);
OutputStreamo=socket.getOutputStream();
ObjectOutputStreamoos=new ObjectOutputStream(o);
DataInputStreamis =new DataInputStream(newBufferedInputStream(socket.getInputStream()));
long length= is.readLong();//文件长度
int rate = 0;
int pass=0;
file=new File(path);
file.createNewFile();
int len=1024*5;
byte[] buf=newbyte[len];//缓冲区
OutputStreamos=new FileOutputStream(file);
int read=0;
while(true){
if(length-pass<len){len=(int)length-pass;}
if((read=is.read(buf))==-1){
break;
}else{
os.write(buf,0,read);
os.flush();
pass+=read;
rate=(int)(((float)pass/length)*100);
if(rate==100){break;}
}
if(rate<100){
oos.writeBoolean(cancel);
oos.flush();
}
if(rate==100){
cancel=true;
oos.writeBoolean(cancel);
oos.flush();
}
}
is.close();
socket.close();
socket=null;
Intentintent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive");
startActivity(intent);
}catch(IOException e){
System.out.println("erroron connect");///
System.out.println(e);///
}
}
}.start();
}
}