java.net 패키지와 java.io 패키지를 이용하여 C/S 구조를 만들어본다.
< 동작 절차 >
1. Server 에서 ServerSocket 클래스를 통해 Port 를 오픈시키고
2. Client 에서 Socket 클래스를 통해 IP와 Port로 Server 에 접근한다.
3. 그렇게 연결된 C/S 는 java.io 의 InputStream과 OutputStream 을 이용해 데이터를 주고받는다.
Server.java
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 31 32 33 34 | package base.server; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class ServerApp01 { public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(7000); System.out.println("[Server] : Client의 접속을 기다린다..."); Socket socket = serverSocket.accept(); System.out.println("[Server] : Client 연결 완료...\n"); BufferedReader fromClient = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); PrintWriter toClient = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"),true); System.out.println("[Server] : Client 접속 후 Data를 받기위한 무한 loop start...\n"); while(true) { String clientData = fromClient.readLine(); System.out.println("[Server] : Client로 부터 전송받은 Data ==> "+clientData); toClient.println("server 회신 [Data receiver OK]"); } } } | cs |
Client.java
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | package base.client; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; public class SocketClientApp { private Socket socket; private BufferedReader fromServer; private PrintWriter toServer; public SocketClientApp() throws Exception{ this.connect("127.0.0.1","7000"); this.dataSendAndReceive(); } public void connect(String connectIp, String connectPort) { try { socket = new Socket(connectIp, Integer.parseInt(connectPort)); socket.setSoTimeout(3000); toServer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"),true); fromServer = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8")); }catch(Exception e) { e.printStackTrace(); } } public void dataSendAndReceive() { BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in)); try { while(true) { System.out.print("[Client] : Server로 전송할 Data : "); String content = keyboard.readLine(); if(content.equals("quit")) { break; } toServer.println(content); String serverData = fromServer.readLine(); System.out.println("[Client] : Server로 부터 받은 Data : "+serverData); } }catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception{ new SocketClientApp(); } } | cs |
반응형
'Backend > JAVA' 카테고리의 다른 글
카카오 카카오링크v2 API 적용 (2) | 2018.07.18 |
---|---|
LocalStorage 기능으로 게시판 임시저장 기능 구현하기 (0) | 2018.07.05 |
페이스북 로그인 API 적용 (0) | 2018.05.25 |
인스타그램 API 적용하여 게시물 가져오기 (0) | 2018.05.25 |
네이버 로그인 API 적용 (4) | 2018.05.25 |
댓글