▽ 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;

		}
	}

}

 

+ Recent posts