일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Spring
- 패스트캠퍼스
- javabasic
- 웹
- 국비
- 스프링
- 직장인인강
- DesignPattern
- DB
- 직장인자기계발
- 패캠챌린지
- js
- 리눅스
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
- 패스트캠퍼스후기
- 디자인
- 자바기초
- 재택근무
- 자바
- String
- linux
- java
- ncs
- java기초
- 자바연습문제
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online강의
- 자바예제
- 자바기본
- 디자인패턴
- 데이터베이스
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 |
Comments