Java Socket文件傳輸
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>