서버는 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);
			}
		}
	}
}

 

출처 : http://baeksupervisor.tistory.com/43 

'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

+ Recent posts