728x90
-Server
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 | mport java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /* * [Server] * Construct * : ServerSocket(int port) * Method * : Socket accept() -> 클라이언트의 요청을 받아 들인 다음 클라이언트에 연결된 소켓 클래스 객체 반환 * : void close() -> 서버소켓을 닫는다. */ public class EchoServerMain { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(10000); System.out.println("클라이언트의 요청을 기다립니다."); Socket client = server.accept(); System.out.println("접속한 클라이언트 정보 : " + "[" + client.getInetAddress().getHostName()+"]"); //클라이언트에서 전송한 메세지를 받는 객체 InputStream is = client.getInputStream(); InputStreamReader dis = new InputStreamReader(is); BufferedReader br = new BufferedReader(dis); //받은 메세지를 클라이언트에 재전송할 객체 OutputStream os = client.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os); // 모든 입력을 다 받을 수 있는 것, 동기식에서 모든 예외처리! PrintWriter pw = new PrintWriter(osw); /* * 동기 : 일정 신호를 받았을 때 다음 동작하는 것. * 비동기 : 타겟의 상태와 상관없이 일방적인 동작하는 것. */ while(true) { String msg = br.readLine(); System.out.println("받은 메세지 : " + msg); if ( msg == null ) { System.out.println(client.getInetAddress() + "연결을 종료합니다."); client.close(); server.close(); break; } //재전송 pw.println(msg); pw.flush(); } } catch(Exception e) { e.printStackTrace(); } } } | cs |
-Client
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 | import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; public class EchoClientMain { public static void main(String[] args) { try { Socket client = new Socket("192.168.1.2", 9800); InputStreamReader isr2 = new InputStreamReader(System.in); BufferedReader keyboard = new BufferedReader(isr2); //서버에 내용을 전송할 객체 OutputStream os = client.getOutputStream(); OutputStreamWriter osr = new OutputStreamWriter(os); PrintWriter pw = new PrintWriter(osr); //서버에서 재전송한 내용을 받는 객체 InputStream is = client.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); while(true) { System.out.println("서버에 전송할 메세지 입력(quit입력시 종료) : "); String msg = keyboard.readLine(); if(msg.equals("quit")) { System.out.println("서버와의 연결을 종료 합니다."); client.close(); break; } pw.println(msg); pw.flush(); String echoMsg = br.readLine(); System.out.println("서버에서 전송된 메세지 : " + echoMsg); } } catch(Exception e) { e.printStackTrace(); } } } | cs |
반응형
'SKILL > JAVA' 카테고리의 다른 글
자바 Calendar ( 출처 : http://huskdoll.tistory.com/566 , http://hyeonstorage.tistory.com/205) (0) | 2017.12.19 |
---|---|
자바 소켓 에코 서버를 이용한 채팅프로그래밍 기본예제 (0) | 2017.12.19 |
자바 소켓프로그래밍 기본예제02 (0) | 2017.12.19 |
자바 소켓프로그래밍 기본예제01 (0) | 2017.12.19 |
자바 파일 입/출력 개념 정리 (출처: http://blog.daum.net/clamp83/51) (0) | 2017.12.19 |