Java Socket文件傳輸

javap 9年前發布 | 1K 次閱讀 Java

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:\TDDOWNLOAD\DEEPBBS.COM_GhostXPsp3_2011.07CJ.iso";

File file = new File(filePath);

DataInputStream input = null; DataOutputStream output = null; Socket socket = null;

try {

String ip = "192.168.1.104"; 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();

} } } </pre>

 本文由用戶 javap 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!