일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- DB
- 패스트캠퍼스
- String
- 직장인인강
- 자바기초
- 디자인
- 국비
- 스프링
- Spring
- javabasic
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
- 자바연습문제
- 디자인패턴
- ncs
- 재택근무
- 자바예제
- 자바
- js
- 데이터베이스
- linux
- java기초
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online강의
- 리눅스
- 패캠챌린지
- 직장인자기계발
- DesignPattern
- 패스트캠퍼스후기
- 자바기본
- 웹
- java
Archives
- Today
- Total
FIF's 코딩팩토리
[Java] http를 이용한 에코서버 (Echo Server)구현 본문
반응형
저번에는 소켓을 이용해서 에코서버를 구현해 보았다.
이번에는 httpHttpURLConnection 과 서블릿을 이용하여 에코서버를 구현해 보겠다.
프로젝트는 Dynamic Web Project로 만든다.
서버는 Tomcat을 사용한다.

HTTPEchoServer
HttpServlet을 상속받아 doPost메소드를 사용한다.
InputStream과 ByteArrayOutputStream을 사용한다.
package httpecho; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // http://[서버의 ip주소]:[포트번호]/[프로젝트명]/[매핑 이름] // http://localhost:8080/EchoProject/main @SuppressWarnings("serial") @WebServlet("/main") public class HTTPEchoServer extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 2> 클라이언트에서 전송한 메시지를 받는 객체 InputStream in = req.getInputStream(); //InputStreamReader, BufferedReader를 사용하지 않고 하는 방법 ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] bytes = new byte[1024]; int cnt; while ((cnt = in.read(bytes)) != -1) { baos.write(bytes, 0, cnt); } byte[] byteData = baos.toByteArray(); String data = new String(byteData); System.out.println("클라이언트 에서 받은 데이터: " + data); // 3> 받은 데이터를 클라이언트에 재전송할 객체 OutputStream out = resp.getOutputStream(); //재전송 out.write(byteData); out.flush(); in.close(); out.close(); } }
HTTPEchoClient
서버를 가동시킨 후 클라이언트를 실행하면 서버에 보낸 데이터를 그대로 받을 수 있다.
package httpecho; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; public class HTTPEchoClient { public static void main(String[] args) { new HTTPEchoClient(); } public HTTPEchoClient() { init(); } public void init() { try { URL url = new URL("http://localhost:8080/EchoProject/main"); HttpURLConnection con = (HttpURLConnection) url.openConnection();// HTTP Connection 구하기 System.out.println("init2() 연결 성공"); con.setRequestMethod("POST");// 요청 방식 설정 con.setConnectTimeout(3000);// 연결 타임 아웃 설정 (3초) con.setReadTimeout(3000);// 읽기 타임아웃 설정(3초) con.setDoOutput(true); con.setDoInput(true); // 1> 서버에 데이터를 전송할 객체 OutputStream out = con.getOutputStream(); String data = "hello"; System.out.println("서버에 보내는 데이터: " + data); byte[] bytes = data.getBytes(); out.write(bytes); out.flush(); System.out.println("응답 코드: " + con.getResponseCode());// 요청 처리 성공 // 4>서버에서 재전송한 데이터를 받는 객체 InputStream in = con.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] bytes2 = new byte[1024]; int cnt; while ((cnt = in.read(bytes2)) != -1) {// 바이트 배열에 baos.write(bytes2, 0, cnt); } byte[] byteData = baos.toByteArray(); String echoData = new String(byteData); System.out.println("서버에서 받은 데이터: " + echoData); //메모리의 누수방지를 위해 꼭 닫아준다 out.close(); in.close(); } catch (Exception e) { e.printStackTrace(); } } }

반응형
'Back-End > Java(자바)' 카테고리의 다른 글
[Java] API도큐먼트 읽는방법 (0) | 2021.02.18 |
---|---|
[Java] 필드(field) (0) | 2020.02.18 |
[Java]소켓(Socket)을 이용한 에코서버(Echo Server) 구현 (0) | 2019.12.23 |
[Java] String format 예제 (0) | 2019.11.26 |
[Java] Set (0) | 2019.11.07 |