계산기 서버, 클라이언트 만들기
계산기 서버와 클라이언트 만들기
Client 01) 단순히 서버에 요청하고 응답을 받아 출력한다.
public class CalculatorClient {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 8888);
PrintStream out = new PrintStream(socket.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
String input = in.readLine();
System.out.println(input);
input = in.readLine();
System.out.println(input);
input = in.readLine();
System.out.println(input);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Server 01) 단순히 클라이언트 요청에 응답하기
public class CalculatorServer {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8888)) {
System.out.println("서버 실행 중...");
try (Socket socket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());) {
out.println("계산기 서버에 오신 걸 환영합니다!");
out.println("계산식을 입력하세요!");
out.println("예) 23 + 7");
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Calculator 02) 응답의 종료 조건을 설정하기
public class CalculatorClient {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 8888);
PrintStream out = new PrintStream(socket.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
02)
while (true) {
String input = in.readLine();
if (input.length() == 0) {
// 빈 줄을 읽었다면 읽기를 끝낸다.
break;
}
System.out.println(input);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Server 02) 응답의 종료 조건을 설정하기
public class CalculatorServer {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8888)) {
System.out.println("서버 실행 중...");
try (Socket socket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());) {
out.println("계산기 서버에 오신 걸 환영합니다!");
out.println("계산식을 입력하세요!");
out.println("예) 23 + 7");
02)
out.println(); // 응답의 끝을 표시하는 빈 줄을 보낸다.
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Calculator 03) 응답을 읽는 코드를 별도의 메서드로 분리한다
public class CalculatorClient {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 8888);
PrintStream out = new PrintStream(socket.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
03)
readResponse(in);
} catch (Exception e) {
e.printStackTrace();
}
}
03)
static void readResponse(BufferedReader in) throws Exception {
while (true) {
String input = in.readLine();
if (input.length() == 0) {
// 빈 줄을 읽었다면 읽기를 끝낸다.
break;
}
System.out.println(input);
}
}
}
Server 03) 안내 메세지 전송 코드를 별도의 메서드로 분리한다
public class CalculatorServer {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8888)) {
System.out.println("서버 실행 중...");
try (Socket socket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());) {
03)
sendIntroMessage(out);
}
} catch (Exception e) {
e.printStackTrace();
}
}
03)
static void sendIntroMessage(PrintStream out) throws Exception {
out.println("[비트캠프 계산기]");
out.println("계산기 서버에 오신 걸 환영합니다!");
out.println("계산식을 입력하세요!");
out.println("예) 23 + 7");
out.println(); // 응답의 끝을 표시하는 빈 줄을 보낸다.
out.flush();
}
}