IT/Java
Java Socket File 전송
유기스토리
2019. 7. 3. 13:55
Java Socket File 전송 예제
1. Server
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/*
* file transfer example
* just in case various file name length
* */
public class FileTransferServer {
ServerSocket server;
Socket socket;
final int PORT = 8091;
DataInputStream dis;
FileOutputStream fos;
File file;
String filePath;
byte[] buffer;
int length;
public FileTransferServer() {
filePath = ".//Server//";
buffer = new byte[1024];
}
public void start() {
//server start
try {
server = new ServerSocket(PORT);
socket = server.accept(); // wait for connected client
dis = new DataInputStream(socket.getInputStream());
int fileCnt = dis.readInt();
for(int i=0; i<fileCnt; i++) {
String fileName = dis.readUTF();
file = new File(filePath+fileName);
file.createNewFile(); // create a file
System.out.println(file.getName());
// start to write content to the file
long fileSize = dis.readLong();
long data = 0;
fos = new FileOutputStream(file);
while((length = dis.read(buffer))!= -1) {
fos.write(buffer,0,length);
data += length;
if(data == fileSize) break; // end of the file
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
fos.close();
dis.close();
server.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new FileTransferServer().start();
}
}
2.Client
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 FileTransferClient {
Socket socket;
final String IP = "127.0.0.1";
final int PORT = 8091;
DataOutputStream dos;
FileInputStream fis;
File dir;
String filePath = ".//Client";
int length;
byte[] buffer;
public FileTransferClient() {
buffer = new byte[1024];
}
public void start() {
try {
socket = new Socket(IP,PORT);
dos = new DataOutputStream(socket.getOutputStream());
// file read
dir = new File(filePath);
dos.writeInt(dir.listFiles().length); // send file cnt
for(File file : dir.listFiles()) {
if(file.isFile()) { // only in case of file
dos.writeUTF(file.getName());
fis = new FileInputStream(file);
dos.writeLong(file.length()); // send file size
while((length = fis.read(buffer))!=-1) {
dos.write(buffer,0,length);
dos.flush();
}
}
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.exit(0);
}
public static void main(String[] args) {
new FileTransferClient().start();
System.out.println("system exit");
}
}