1.客户端代码
package cn.base.network.socket;
import java.io.*;
import java.net.Socket;
/**
* @author gu.fei
* @version 2017-03-22 9:37
*/
public class UploadFileClient {
public static void main(String[] args) {
UploadFileClient client = new UploadFileClient();
client.uploadFile();
}
public void uploadFile() {
Socket socket = null;
DataOutputStream os = null;
FileInputStream fis = null;
ByteArrayOutputStream bos = null;
try {
socket = new Socket("127.0.0.1",1000);
fis = new FileInputStream(new File("D:\\gx-cms.rar"));
bos = new ByteArrayOutputStream();
byte[] b = new byte[1024*1024*8];
int n;
while((n = fis.read(b)) != -1) {
bos.write(b,0,n);
}
os = new DataOutputStream(socket.getOutputStream());
os.writeLong(new File("D:\\gx-cms.rar").length());
os.write(bos.toByteArray());
os.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
os.close();
fis.close();
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.服务端代码
package cn.base.network.socket;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.NumberFormat;
/**
* @author gu.fei
* @version 2017-03-22 9:52
*/
public class UploadFileServer extends Thread {
public static void main(String[] args) {
UploadFileServer fileServer = new UploadFileServer();
fileServer.start();
}
@Override
public void run() {
ServerSocket serversocket = null;
Socket socket = null;
FileOutputStream fos = null;
DataInputStream dis = null;
try {
serversocket = new ServerSocket(1000);
socket = serversocket.accept();
fos = new FileOutputStream(new File("D:\\test.jar"));
dis = new DataInputStream(socket.getInputStream());
Long len = dis.readLong();
System.out.println("文件的长度为:" + len + "\n");
System.out.println("开始接收文件!" + "\n");
byte[] b = new byte[1024*1024*8];
int off;
int dlen = 0;
do{
off = dis.read(b);
if(off == -1) {
break;
}
fos.write(b,0,off);
dlen += off;
NumberFormat numberFormat = NumberFormat.getInstance();
// 设置精确到小数点后2位
numberFormat.setMaximumFractionDigits(2);
String result = numberFormat.format((float)dlen/(float)len*100);
System.out.println("文件已经下载:" + result + "%");
try {
Thread.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}while (off != -1);
System.out.println("下载完成!");
fos.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
serversocket.close();
socket.close();
fos.close();
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}