728x90
1단계 - 프로토콜에 맞춰 게시글 데이터의 저장을 요청한다.
- .domain.Medicine 클래스 가져오기
- .domain.Plant 클래스 가져오기
- .domain.Like 클래스 가져오기
- .domain.Member 클래스 가져오기
- .domain.MailBox 클래스 가져오기
- .ClientApp 변경
- addBoard() 메서드 추가
- 프로토콜에 맞춰 Board 객체를 JSON 데이터로 바꿔 서버에 보내기
- 서버의 응답 결과를 출력하기
public class ClientApp {
public static void main(String[] args) throws Exception {
System.out.println("[PMS 클라이언트]");
System.out.println("1) 서버와 연결 중");
Socket socket = new Socket("127.0.0.1", 8888); // 서버와 접속이 이루어지면 리턴한다.
System.out.println("2) 서버와 연결되었음");
PrintWriter out = new PrintWriter(socket.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
String input = Prompt.inputString("명령> ");
if (input.equals("/freeBoard/add")) {
addFreeBoard(out,in);
} else if (input.equals("/freeBoard/detail")) {
detailFreeBoard(out,in);
} else {
out.println(input);
out.flush();
String result = in.readLine(); // 서버에서 한 줄의 문자열을 보낼 때까지 기다린다.
System.out.println(">>> " + result);
}
if (input.equalsIgnoreCase("quit")) {
break;
}
}
System.out.println("3) 서버와의 접속을 끊음");
out.close();
socket.close();
Prompt.close();
}
private static void addFreeBoard(PrintWriter out, BufferedReader in) throws Exception {
out.println("/freeboard/add");
FreeBoard freeboard = new FreeBoard();
freeboard.setNo(1);
freeboard.setTitle("제목1");
freeboard.setContent("내용1");
freeboard.setRegisteredDate(Date.valueOf("2021-1-1"));
Member m = new Member();
m.setNo(100);
m.setName("aaa");
m.setEmail("aaa@test.com");
freeboard.setWriter(m);
out.println(new Gson().toJson(freeboard));
out.flush();
String result = in.readLine();
System.out.println("===>" + result);
}
private static void detailFreeBoard(PrintWriter out, BufferedReader in) throws Exception {
out.println("/freeboard/detail");
HashMap<String,Object> map = new HashMap<>();
map.put("no", 100);
String jsonStr = new Gson().toJson(map);
System.out.println(jsonStr);
out.println(jsonStr);
out.flush();
System.out.println(in.readLine());
String result = in.readLine();
FreeBoard freeboard = new Gson().fromJson(result, FreeBoard.class);
System.out.println(freeboard);
}
}
1단계 - 프로토콜에 맞춰 게시글 데이터의 저장 요청을 처리한다.
- .ServerApp` 변경
- 저장 성공 시 success 응답을 보낸다.
- 저장 실패 시 fail 응답을 보낸다.
- -프로토콜에 맞춰 JSON 형식으로 받은 데이터를 Board 객체로 변환하여 저장한다.
public class ServerApp {
public static void main(String[] args) throws Exception {
System.out.println("[PMS 서버]");
System.out.println("1) 서버 소캣 준비");
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("2) 클라이언트의 접속을 기다림");
Socket socket = serverSocket.accept(); // 클라이언트가 접속하면 리턴한다.
System.out.println("3) 클라이언트가 접속했음");
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream());
while (true) {
String command = in.readLine(); // 클라이언트에서 한 줄의 문자열을 보낼 때까지 기다린다.
System.out.println("===> " + command);
if (command.equalsIgnoreCase("quit")) {
out.println("goodbye");
out.flush();
break;
} else if (command.equals("/freeboard/add")) {
addFreeBoard(out, in);
} else if (command.equals("/freeboard/detail")) {
detailFreeBoard(out, in);
} else {
out.println(command);
out.flush();
}
}
System.out.println("4) 클라이언트와의 접속을 끊음");
out.close();
in.close();
socket.close();
System.out.println("5) 서버 소켓 종료");
serverSocket.close(); // 더 이상 클라이언트의 접속을 수용하지 않는다.
}
private static void addFreeBoard(PrintWriter out, BufferedReader in) throws Exception {
String jsonStr = in.readLine();
FreeBoard freeboard = new Gson().fromJson(jsonStr, FreeBoard.class);
System.out.println(freeboard);
out.println("success");
out.flush();
}
@SuppressWarnings("unchecked")
private static void detailFreeBoard(PrintWriter out, BufferedReader in) throws Exception {
String jsonStr = in.readLine();
HashMap<String,Object> map = new Gson().fromJson(jsonStr, HashMap.class);
System.out.println(map);
FreeBoard freeboard = new FreeBoard();
freeboard.setNo(2);
freeboard.setTitle("제목1xxxx");
freeboard.setContent("내용1xxxx");
freeboard.setRegisteredDate(Date.valueOf("2021-1-1"));
Member m = new Member();
m.setNo(101);
m.setName("aaaxxxx");
m.setEmail("aaaxxxx@test.com");
freeboard.setWriter(m);
out.println(new Gson().toJson(freeboard));
out.flush();
}
}
hashmap으로 detail 변경을 보여줌
'Project' 카테고리의 다른 글
DB 모델링 및 테이블 준비 (0) | 2021.10.19 |
---|---|
데이터 관리 서버 만들기 - 5) 통신 기능을 캡슐화 (0) | 2021.10.11 |
데이터 관리 서버 만들기 - 3) 사용자가 입력한 명령처리 (0) | 2021.10.03 |
Java로 게시판 자동 번호 생성하기 (0) | 2021.09.20 |
비트 연산자로 권한 설정하기 (0) | 2021.09.14 |