Socket 上传文件
2015-10-20 09:21
69 查看
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class FileServer { private int port = 1128; private ServerSocket servSocket; private Socket socket; private DataInputStream input; private DataOutputStream outPut; private String savePath = "E:\\up\\"; public void startServer() { // 已经传输的文件大小 int ycSize = 0; // 文件总大小 long sumSize = 0; // 缓存大小 int hcSize = 8192; // 缓存 byte[] hc = new byte[hcSize]; try { servSocket = new ServerSocket(port); socket = servSocket.accept(); input = new DataInputStream(new BufferedInputStream( socket.getInputStream())); } catch (IOException e) { e.printStackTrace(); } try { // 将文件名字读取进来 savePath += input.readUTF(); // 文件的长度读取进来(实际只是为了显示进度) sumSize = input.readLong(); } catch (IOException e) { e.printStackTrace(); } try { outPut = new DataOutputStream(new BufferedOutputStream( new FileOutputStream(savePath))); } catch (FileNotFoundException e) { e.printStackTrace(); } while (true) { int read = 0; if (input != null) { try { read = input.read(hc); } catch (IOException e) { e.printStackTrace(); } } ycSize += read; if (read == -1) { break; } // 下面进度条本为图形界面的prograssBar做的,这里如果是打文件,可能会重复打印出一些相同的百分比 System.out.println("文件接收了" + (ycSize * 100 / sumSize) + "%\n"); try { outPut.write(hc, 0, read); } catch (IOException e) { e.printStackTrace(); } } if (outPut != null) { try { outPut.close(); } catch (IOException e) { e.printStackTrace(); } outPut = null; } if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } input = null; } if (socket != null) { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } socket = null; } if (servSocket != null) { try { servSocket.close(); } catch (IOException e) { e.printStackTrace(); } servSocket = null; } System.out.println("接收完成,文件存为" + savePath + "\n"); } public static void main(String[] args) { FileServer fileServer = new FileServer(); fileServer.startServer(); } }
import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; public class FileClient { public static void main(String[] args) { String filePath = "E:\\test.txt"; File file = new File(filePath); DataInputStream input = null; DataOutputStream output = null; Socket socket = null; try { String ip = "5.239"; int port = 1128; socket = new Socket(ip, port); input = new DataInputStream(new BufferedInputStream( new FileInputStream(filePath))); output = new DataOutputStream(socket.getOutputStream()); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { output.writeUTF(file.getName()); output.flush(); output.writeLong((long) file.length()); output.flush(); } catch (IOException e) { e.printStackTrace(); } int bufferSize = 8192; byte[] buf = new byte[bufferSize]; while (true) { int read = 0; if (input != null) { try { read = input.read(buf); } catch (IOException e) { e.printStackTrace(); } } if (read == -1) { break; } try { output.write(buf, 0, read); output.flush(); } catch (IOException e) { e.printStackTrace(); } } try { input.close(); output.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- Navicat Premium简介、下载、安装、破解、连接Oracle
- C++语言里静态变量和全局变量
- Android多媒体播放器
- Android异常问题记录
- XYLX 10.19 天堂(HEAVEN)
- Web安全之SQL注入攻击技巧与防范
- 数据包接收系列 — 下半部实现(软中断)
- 关于android 分享功能
- 测试
- Nhibernate Unknown entity class 的解决办法
- 公众号的菜单栏
- java socket编程(也是学习多线程的例子)详细版----转
- Stackoverflow上人气最旺的10个Java问题
- WPF后台设置控件控件Background
- git grep简介
- java 线程池
- B树、B-树、B+树、B*树【转】,mysql索引
- tcpdump
- SpriteKit 笔记整理(不全)
- C提高(3):内存四区深入理解