서버는 java.net.ServerSoket 을 이용해 소켓을 생성한다.
java.net.Socket 을 이용해 클라이언트의 접속을 대기(accept())한다.
접속한 클라이언트의 정보는 java.net.InetAddress 을 반환하는 getInetAddress() 메소드를 사용한다.
Socket 의 getInputStream(), getOutputStream() 메소드를 이용해 접속한 클라이언트와 통신하게 된다.
클라이언트는 Socket 을 통해 서버에 접속하고 서버와 같이 Stream 을 통해 통신한다.
socket 을 닫기(close()) 전에 반드시 Stream 들을 close() 하도록 한다.
package com.cs.baeksupervisor; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class EchoServer { public static void main(String[] args) { ServerSocket server = null; Socket socket = null; InetAddress inetAddr = null; InputStream in = null; OutputStream out = null; BufferedReader reader = null; PrintWriter writer = null; try { // 서버 소켓 생성 server = new ServerSocket(1590); // 클라이언트의 접속 대기 System.out.println("====== 클라이언트의 접속 대기 중 (port:"+server.getLocalPort()+")====="); socket = server.accept(); // 클라이언트의 접속 요청 inetAddr = server.getInetAddress(); System.out.println("클라이언트("+inetAddr.getHostAddress()+") 접속"); // 클라이언트와 통신을 위한 stream 생성 in = socket.getInputStream(); out = socket.getOutputStream(); reader = new BufferedReader(new InputStreamReader(in)); writer = new PrintWriter(new OutputStreamWriter(out)); String msg = null; // 클라이언트와 통신 while((msg = reader.readLine()) != null) { System.out.println("\tCLIENT>"+msg); writer.println(msg); writer.flush(); } } catch(IOException ie) { System.out.println(ie); } finally { try { reader.close(); writer.close(); in.close(); out.close(); socket.close(); server.close(); System.out.println("종료."); } catch(IOException ie) { System.out.println(ie); } } } }
package com.cs.baeksupervisor; import java.io.BufferedReader; import java.io.IOException; 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 EchoClient { public static void main(String[] args) { Socket socket = null; InputStream in = null; OutputStream out = null; BufferedReader reader = null; PrintWriter writer = null; BufferedReader stdin = null; try { // 서버로 접속 socket = new Socket("127.0.0.1", 1590); System.out.println("접속성공 !!"); // 서버와 통신을 위한 stream, 표준입력 변수 in = socket.getInputStream(); out = socket.getOutputStream(); reader = new BufferedReader(new InputStreamReader(in)); writer = new PrintWriter(new OutputStreamWriter(out)); stdin = new BufferedReader(new InputStreamReader(System.in)); String msg = null; String echo = null; // 서버와 통신 while((msg = stdin.readLine()) != null) { writer.println(msg); writer.flush(); echo = reader.readLine(); System.out.println("\tSERVER>"+echo); } } catch(IOException ie) { System.out.println(ie); } finally { try { stdin.close(); reader.close(); writer.close(); in.close(); out.close(); socket.close(); System.out.println("종료."); } catch(IOException ie) { System.out.println(ie); } } } }
'Java' 카테고리의 다른 글
[Java] 한글 처리 (0) | 2014.11.18 |
---|---|
[linux] 오라클 에러 정보 확인 (0) | 2014.08.29 |
[Java] 정규식 패턴 (0) | 2014.07.17 |
[Java] Java Doc 사용법 (0) | 2014.07.14 |
[Java] Java와 스크립트 통신 (0) | 2014.06.12 |