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.*;
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(); } } } }
相关文章推荐
- Linux下基于C实现的socket简单文件上传实例
- Java中用Socket实现HTTP文件上传实例
- AJAX与JSF实现带进度条的批量上传文件实例
- AJAX与JSF实现带进度条的批量上传文件实例
- AJAX与JSF实现带进度条的批量上传文件实例
- AJAX与JSF实现带进度条的批量上传文件实例
- AJAX与JSF实现带进度条的批量上传文件实例
- AJAX与JSF实现带进度条的批量上传文件实例
- AJAX与JSF实现带进度条的批量上传文件实例
- AJAX与JSF实现带进度条的批量上传文件实例
- AJAX与JSF实现带进度条的批量上传文件实例
- PHP实现上传文件生成小图加文字的实例
- AJAX与JSF实现带进度条的批量上传文件实例
- AJAX与JSF实现带进度条的批量上传文件实例
- ASP文件上传原理分析及实现实例
- AJAX与JSF实现带进度条的批量上传文件实例
- AJAX与JSF实现带进度条的批量上传文件实例
- AJAX与JSF实现带进度条的批量上传文件实例
- AJAX与JSF实现带进度条的批量上传文件实例
- AJAX与JSF实现带进度条的批量上传文件实例