Socket 上传文件

来源:互联网 发布:火腿肠的吃法知乎 编辑:程序博客网 时间:2024/05/28 19:25
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();}}}

1 0