mojo's Blog
수식 계산 Server-Client 만들기 본문
클라이언트가 수식을 보내면 서버가 수식을 계산한 후에 답을 전송하는 통신 프로그램을 만들어 본다.
프로그램의 동작 방법은 다음과 같다.
- 서버 클라이언트는 1:1로 통신한다.
- 서버를 먼저 실행시키고 클라이언트를 실행시켜 서버에 접속한다.
- 클라이언트는 사용자로부터 수식을 입력받아 서버로 전송한다. 연산자는 +, -, * 3가지만 허용하고 정수 연산만 가능하다.
- 서버가 식을 받으면 식을 서버의 화면에 출력하고, 계산하여 결과를 클라이언트로 보낸다.
- 클라이언트는 서버로부터 받은 답을 화면에 출력한다.
- 클라이언트와 서버는 전송할 데이터를 문자열로 만들고 "\n" 을 덧붙여 전송하며, 받는 쪽에서는 라인 단위로 수신한다.
- 클라이언트가 "bye" 를 보내면 양쪽 모두 종료한다.
Server Code
package Part15;
import java.io.*;
import java.util.*;
import java.net.*;
public class ServerEx {
public static String calc(String exp) {
StringTokenizer st = new StringTokenizer(exp, " ");
if(st.countTokens() != 3) return "error";
String res = "";
int op1 = Integer.parseInt(st.nextToken());
String opcode = st.nextToken();
int op2 = Integer.parseInt(st.nextToken());
switch(opcode){
case "+": res = Integer.toString(op1 + op2);
break;
case "-": res = Integer.toString(op1 - op2);
break;
case "*": res = Integer.toString(op1 * op2);
break;
default : res = "error";
}
return res;
}
public static void main(String[] args) {
BufferedReader in = null;
BufferedWriter out = null;
ServerSocket listener = null;
Socket socket = null;
Scanner scanner = new Scanner(System.in);
try {
listener = new ServerSocket(9999);
System.out.println("연결들 기다리고 있습니다......");
socket = listener.accept();
System.out.println("연결되었습니다.");
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while(true) {
String inputMessage = in.readLine();
if(inputMessage.equalsIgnoreCase("bye")) {
System.out.println("Client 에서 bye로 연결을 종료하였음");
break;
}
System.out.println("클라이언트 : "+inputMessage);
String outputMessage = calc(inputMessage);
out.write(outputMessage+"\n");
out.flush();
}
} catch(IOException e) {
System.out.println(e.getMessage());
}
finally {
try {
scanner.close();
socket.close();
listener.close();
} catch(IOException e) {
System.out.println("클라이언트와 채팅 중 오류가 발생했습니다.");
}
}
}
}
Client Code
package Part15;
import java.io.*;
import java.util.*;
import java.net.*;
public class ClientEx {
public static void main(String[] args) {
BufferedReader in = null;
BufferedWriter out = null;
Socket socket = null;
Scanner scanner = new Scanner(System.in);
try {
socket = new Socket("localhost", 9999);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while(true) {
System.out.print("보내기 >> ");
String outputMessage = scanner.nextLine();
if(outputMessage.equalsIgnoreCase("bye")) {
out.write(outputMessage+"\n");
out.flush();
break;
}
out.write(outputMessage+"\n");
out.flush();
String inputMessage = in.readLine();
System.out.println("서버 : "+inputMessage);
}
} catch(IOException e) {
System.out.println(e.getMessage());
}
finally {
try {
scanner.close();
if(socket != null) socket.close();
} catch(IOException e) {
System.out.println("클라이언트와 채팅 중 오류가 발생했습니다.");
}
}
}
}
'Java' 카테고리의 다른 글
명품 JAVA Programming 제 15장 실습문제 (1, 4, 7, 8 제외) (0) | 2021.08.23 |
---|---|
명품 JAVA Programming 제 15장 Open Challenge (0) | 2021.08.23 |
Server-Client Chatting Program 만들기 (0) | 2021.08.23 |
Socket Programming (0) | 2021.08.23 |
네트워크 TCP/IP (0) | 2021.08.23 |
Comments