▽ Server 예제 코드 ▽
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server_test {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(50000);
Socket sock = server.accept();
OutputStream os = sock.getOutputStream();
InputStream is = sock.getInputStream();
DataOutputStream dos = new DataOutputStream(os);
DataInputStream dis = new DataInputStream(is);
System.out.println(sock.getInetAddress() + "에서 연결하였습니다.");
while(true) {
File root = new File("D:\\디지털컨버전스2월-2");
File[] list = root.listFiles();
dos.writeInt(list.length);
dos.flush();
for(File f : list) {
dos.writeUTF(f.getName());
dos.flush();
}
String fname = dis.readUTF();
System.out.println(sock.getInetAddress()+ "님의 선택 파일 : " + fname);
File target = new File("D:\\디지털컨버전스2월-2\\" + fname);
// 하드디스크-Ram 간의 데이터를 주고받을 때도 Stream이 필요함
// Ram을 기준으로, 데이터가 Ram으로 들어오면 input, Ram에서 나가면 output
FileInputStream fis = new FileInputStream(target);
DataInputStream fileDis = new DataInputStream(fis);
// 하드디스크의 있는 파일을 Ram으로 불러옴
// 배열 만들 때 사이즈는 int로만 정할 수 있음(Casting 필요)
dos.writeLong(target.length());
dos.flush();
byte[] fileContents = new byte[(int)target.length()];
fileDis.readFully(fileContents);
dos.write(fileContents);
dos.flush();
if(dis.readBoolean()) break;
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
▽ Client 예제 코드 ▽
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class Client_test {
public static void main(String[] args) throws Exception {
Socket sock = new Socket("127.0.0.1", 50000);
OutputStream os = sock.getOutputStream();
InputStream is = sock.getInputStream();
DataOutputStream dos = new DataOutputStream(os);
DataInputStream dis = new DataInputStream(is);
while(true) {
int leng = dis.readInt();
System.out.println("파일의 개수 : " + leng);
System.out.println("파일의 명단");
for(int i =0 ; i < leng; i++ ) {
System.out.println((i+1)+"번 파일 : " + dis.readUTF());
}
dos.writeUTF(JOptionPane.showInputDialog("읽을 파일을 입력하세요"));
dos.flush();
long fsize = dis.readLong();
System.out.println("파일 사이즈 : " + fsize);
byte[] fileContents = new byte[(int)fsize];
dis.readFully(fileContents);
// 하드디스크-Ram 간의 데이터를 주고받을 때도 Stream이 필요함
// Ram을 기준으로, 데이터가 Ram으로 들어오면 input, Ram에서 나가면 output
FileOutputStream fos = new FileOutputStream("C:\\Users\\user1\\Desktop\\대왕감자3.txt");
DataOutputStream fileDos = new DataOutputStream(fos);
fileDos.write(fileContents);
fileDos.flush();
fileDos.close();
dos.writeBoolean(true);
dos.flush();
break;
}
}
}