Android通过SOCKET下载文件的方法
本文实例讲述了Android通过SOCKET下载文件的方法。分享给大家供大家参考,具体如下:
服务端代码
importjava.io.BufferedInputStream;
importjava.io.DataInputStream;
importjava.io.DataOutputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.net.ServerSocket;
importjava.net.Socket;
importjava.util.Scanner;
publicclassFunctionServer{
privatestaticintPORT=2012;
privateStringpath="需要下载的文件所在路径";
publicstaticvoidmain(String[]args)throwsIOException{
FunctionServerserver=newFunctionServer();
server.start();
}
publicvoidstart()throwsIOException{
ServerSocketss=newServerSocket(PORT);
while(true){
Sockets=ss.accept();
newService(s).start();//创建线程
}
}
classServiceextendsThread{
Sockets;
publicService(Sockets){
this.s=s;
}
publicvoidrun(){
try{
InputStreamin=s.getInputStream();//得到输入流
Scannersc=newScanner(in);
OutputStreamout=s.getOutputStream();
while(true){
Stringstr=sc.nextLine();//读取文件名
if(!str.equals(null)){
System.out.println("你的文件名是"+str);
//根据路径和文件名获取文件
Filef=newFile(path+str);
FileInputStreamfis=newFileInputStream(f);
DataInputStreamdis=newDataInputStream(newBufferedInputStream(fis));
byte[]buffer=newbyte[8192];
DataOutputStreamps=newDataOutputStream(out);
ps.writeLong((long)f.length());//发送文件大小
ps.flush();
while(true){
intread=0;
if(dis!=null){
read=fis.read(buffer);
}
if(read==-1){
break;
}
ps.write(buffer,0,read);
}
ps.flush();
dis.close();
s.close();
out.flush();
break;
}
}
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
客户端代码,下载线程
classDownloadThreadextendsThread{
Socketsocket;
InputStreamin;
OutputStreamout;
Stringpath="文件保存路径";
StringfunctionName;
StringserverIp="服务器IP";
intsocketPort="服务端口号";
intfileSize,downLoadFileSize;
publicDownloadThread(StringfunctionName){
this.functionName=functionName;
}
@Override
publicvoidrun(){
Looper.prepare();
while(!Thread.interrupted()){
try{
socket=newSocket(serverIp,socketPort);
InputStreamin=socket.getInputStream();
OutputStreamout=socket.getOutputStream();
out.write((functionName+"\n").getBytes("gbk"));
out.flush();//清理缓冲,确保发送到服务端
Filef=newFile(path+functionName);
OutputStreamsong=newFileOutputStream(f);
DataInputStreamdis=newDataInputStream(
newBufferedInputStream(in));
DataOutputStreamdos=newDataOutputStream(
newBufferedOutputStream(song));
fileSize=(int)dis.readLong()-1;
System.out.println("开始下载");
byte[]buffer=newbyte[8192];
while(true){
intread=0;
if(dis!=null){
read=dis.read(buffer);
downLoadFileSize+=read;
}
if(read==-1){
break;
}
dos.write(buffer,0,read);
}
System.out.println("文件下载完成");
dos.close();
}catch(UnknownHostExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
this.interrupt();
}
}
}
}
基本可以直接用,根据自己需要稍微改动就OK了
希望本文所述对大家Android程序设计有所帮助。