Java /day15 / 23.09.12(화) / (핀테크) Spring 및 Ai 기반 핀테크 프로젝트 구축

허니몬·2023년 9월 12일
post-thumbnail

P16_nio


ch02_echo


EchoServer

package ch02_echo;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

// 데이터 전송
public class EchoServer {
	public static void main(String[] args) {
		// 서버
		// # 서버가 먼저 돌고있어야 클라이언트가 요청 가능
		ServerSocket listener = null;
		Socket socket = null;

		// 한 번에 처리하기 위해 버퍼 사용
		BufferedReader in = null;

		try {

			listener = new ServerSocket(10000); // 서버 소켓 생성
			System.out.println("- Server 준비 -");

			socket = listener.accept(); // 클라이언트로 부터 연결 요청 대기
			
			// 클라이언트로 부터의 입력 스트림
			in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			// 클라이언트로 부터 한 행의 텍스트 읽기
			String inPutmessage = in.readLine();
			
			System.out.println("클라이언트 : " + inPutmessage);

		} catch (Exception e) {
			System.out.println("서버 Error");
		} finally {
			try {
				if (in != null)
					in.close();
				if (socket != null)
					socket.close();
				if (listener != null)
					listener.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

EchoClient

package ch02_echo;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;

public class EchoClient {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		BufferedWriter out = null;

		Socket socket = null;
		try {
			socket = new Socket("localhost", 10000);
			System.out.println("서버 연결... ");

			// 데이터 서버로 보내기 위한 통로
			// 서버로 부터의 출력 스트림
			out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

			System.out.print("전송 데이터 입력 > ");
			String outMessage = sc.nextLine();

			out.write(outMessage + "\n");
			// flush() : 스트림 안의 데이터를 모두 전송
			out.flush();

		} catch (Exception e) {
			System.out.println("클라이언트 Error");
		} finally {
			try {
				if (out != null)
					out.close();
				if (socket != null)
					socket.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

	}
}

ch03_chat


ChatServer

package ch03_chat;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class ChatServer {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 서버
		// # 서버가 먼저 돌고있어야 클라이언트가 요청 가능
		ServerSocket listener = null;
		Socket socket = null;
		// 한 번에 처리하기 위해 버퍼 사용
		BufferedReader sin = null;
		// 출력 통로 생성
		BufferedWriter sout = null;
		
		
		try {

			listener = new ServerSocket(10000); // 서버 소켓 생성
			System.out.println("- Server 준비 -");

			socket = listener.accept(); // 클라이언트로 부터 연결 요청 대기

			// 클라이언트로 부터의 입력 스트림
			// 서버 수신
			sin = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			// 서버 송신
			sout = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
			
			String inputMessage = null;
			while(true) {
				// 클라이언트가 전송한 데이터 읽기
				inputMessage = sin.readLine();
				if(inputMessage.equals("end")) {
					System.out.println("연결 종료");
					break;
				}
				System.out.println("sin : " + inputMessage);
				System.out.println();
				System.out.print("서버 입력 > ");
				String outputMessage = sc.nextLine();
				sout.write(outputMessage + "\n");
				sout.flush();
			}
			
		} catch (Exception e) {
			System.out.println("서버 Error");
		} finally {
			try {
				if (sout != null)
					sout.close();
				if (sin != null)
					sin.close();
				if (socket != null)
					socket.close();
				if (listener != null)
					listener.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

ChatClient

package ch03_chat;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;

public class ChatClient {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Socket socket = null;
		BufferedReader cin =null;
		BufferedWriter cout = null;
		
		try {
			socket = new Socket("localhost", 10000);
			System.out.println("서버 연결... ");

			// 데이터 서버로 보내기 위한 통로
			// 서버로 부터의 출력 스트림
			// 클라이언트 수신
			cin = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			// 클라이언트 송신
			cout = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
			
			String outputMessage = null;
			while(true) {
				System.out.print("클라이언트 입력 > ");
				outputMessage = sc.nextLine();
				if(outputMessage.equals("end")) {
					cout.write(outputMessage + "\n");
					cout.flush();
					break;
				}
				cout.write(outputMessage + "\n");
				cout.flush();
				System.out.println();
				// 서버가 전송한 데이터
				String inputMessage = cin.readLine();
				System.out.println("cin : " + inputMessage);
			}

		} catch (Exception e) {
			System.out.println("클라이언트 Error");
		} finally {
			try {
				if (cin != null)
					cin.close();
				if (cout != null)
					cout.close();
				if (socket != null)
					socket.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}
}

- Server 준비 -
sin : 안뇽

서버 입력 > 그래 안뇽
sin : 뭐라했냐

서버 입력 > 안녕이라 했다
연결 종료


ch04_quiz


CalcServer

package ch04_quiz;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

/*
 * 클라이언트가 서버로 보낸 데이터를 서버가 받아서 더하는 코드를 작성하세요
 * 클라이언트로 부터 -(minus) 값이 전송되면 계산을 멈추고 종료합니다
 */
public class CalcServer {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		ServerSocket listener = null;
		Socket socket = null;
		BufferedReader sin = null;
		BufferedWriter sout = null;

		try {
			listener = new ServerSocket(10000);
			System.out.println("- Server Ready -");
			socket = listener.accept();

			sin = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			sout = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

			String inputInt1 = null;
			String inputInt2 = null;
			while (true) {
				inputInt1 = sin.readLine();
				inputInt2 = sin.readLine();	
				if (inputInt1.charAt(0)=='-'||inputInt2.charAt(0)=='-') {
					System.out.println("end");
					break;
				}
				System.out.println("num1 : " + Integer.parseInt(inputInt1) + " - num2 : " + Integer.parseInt(inputInt2) +" - sum : " + (Integer.parseInt(inputInt1) + Integer.parseInt(inputInt2)));
				System.out.println();
				System.out.println("다시 하려면 아무키나 입력하세요");
				String anykey = sc.next();
				sout.write(anykey +"\n");
				sout.flush();
				
			}

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("Server Error");
		} finally {
			try {
				if (sout != null)
					sout.close();
				if (sin != null)
					sin.close();
				if (socket != null)
					socket.close();
				if (listener != null)
					listener.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	}
}

CalcClient

package ch04_quiz;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;

public class CalcClient {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Socket socket = null;
		BufferedReader cin = null;
		BufferedWriter cout = null;
		
		try {
			socket = new Socket("localhost", 10000);
			System.out.println("Server Conect...");
			
			cin = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			cout = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
			
			String outputInt1 = null;
			String outputInt2 = null;
			while(true) {
				System.out.print("더할 숫자 2개 입력 \n"
						+ "ex) 1 2\n"
						+ ">>");
				outputInt1 = sc.next();
				outputInt2 = sc.next();
				if(outputInt1.charAt(0)=='-'||outputInt2.charAt(0)=='-') {
					cout.write(Integer.parseInt(outputInt1) + "\n");
					cout.write(Integer.parseInt(outputInt2) + "\n");
					System.out.println("음수입력 ㄴㄴ");
					cout.flush();
					break;
				}
				cout.write(Integer.parseInt(outputInt1) + "\n");
				cout.write(Integer.parseInt(outputInt2) + "\n");
				cout.flush();
				System.out.println();
				int inputMessage = cin.read() + cin.read();
				System.out.println("다시 시작");
			}
			
		} catch (Exception e) {
			System.out.println("Client Error");
		} finally {
			try {
				if(cin != null) cin.close();
				if(cout != null) cout.close();
				if(socket != null) socket.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}
}

ch04_quizT


CalcServer

package ch04_quizT;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

/*
 * 클라이언트가 서버로 보낸 데이터를 서버가 받아서 더하는 코드를 작성하세요
 * 클라이언트로 부터 -(minus) 값이 전송되면 계산을 멈추고 종료합니다
 */

public class CalcServer {

	public static void main(String[] args) {
		
		// 서버
		ServerSocket listener = null;
		Socket socket = null;
		BufferedReader sin = null;
		BufferedWriter sout = null;
		int sum = 0; // 합
		
		try {
			
			listener = new ServerSocket(10000);  
			System.out.println("- 계산 준비 -");
			
			socket = listener.accept();
			
			sin = new BufferedReader(new InputStreamReader(socket.getInputStream()));   // 서버 수신
			sout = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));// 서버 송신
			
			String inputMessage = null;
			while(true) {
				inputMessage = sin.readLine(); // 클라이언트가 전송한 데이터 읽기
				int data = Integer.parseInt(inputMessage);
				if(data < 0) {
					sout.write("결과 : " + sum + "\n");
					sout.flush();
					break;
				}
				sum += data;
				sout.write("합 : " + sum + "\n");
				sout.flush();
			}
			
		} catch (Exception e) {
			System.out.println("서버 error~");
		} finally {
			try {
				if(sout != null) sout.close();
				if(sin != null) sin.close();
				if(socket != null) socket.close();
				if(listener != null) listener.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		
		
	}
	
}

CalcClient

package ch04_quizT;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;

public class CalcClient {

	public static void main(String[] args) {
		
		Scanner scanner = new Scanner(System.in);
		
		// 클라이언트
		Socket socket = null;
		BufferedReader cin = null;
		BufferedWriter cout = null;
		
		try {
			
			socket = new Socket("localhost", 10000);
			System.out.println("서버 연결...");
			
			cin = new BufferedReader(new InputStreamReader(socket.getInputStream()));    // 클라이언트 수신
			cout = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); // 클라이언트 송신
			
			String outputMessage = null;
			while(true) {
				System.out.print("클라이언트 입력 > ");
				outputMessage = scanner.nextLine();
				
				try {
					// 입력값이 숫자 형태인지 확인
					int data = Integer.parseInt(outputMessage);
					
					// 정상이면 전송
					cout.write(outputMessage + "\n");
					cout.flush();
					
					String calcResult = cin.readLine(); // 서버로부터 받은 데이터
					System.out.println(calcResult);
					
					if(data < 0)
						break;
					
				} catch (Exception e) {
					System.out.println("숫자가 아닙니다~");
				}
				
			} // while

			
		} catch (Exception e) {
			System.out.println("클라이언트 error~");
		} finally {
			try {
				if(cin != null) cin.close();
				if(cout != null) cout.close();
				if(socket != null) socket.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
	}
	
}
profile
Fintech

0개의 댓글