您的位置:首页 > 其它

socket 实现文件上传实例

2017-03-22 10:38 561 查看
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) {

8bba
e.printStackTrace();
} finally {
try {
serversocket.close();
socket.close();
fos.close();
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: