SimpleClient(Socket)

SimpleClient(Socket)

소스코드

package study.socket;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;


/**
 * 사용자로 부터 입력받은 문자열을 서버( SimpleServer )로 전송하고,
 * 돌려받은 값에 따라 종료 및 출력을 하는 SimpleClient
 */
public class SimpleClient {

	// 입력 스트림으로 부터 Data를 읽는 메소드
	private static String receiveData( BufferedReader bufferedReader ) throws IOException {
		char[] data = new char[ 1024 ];
		bufferedReader.read( data );
		return String.valueOf( data ).trim();
	}


	// 출력 스트림으로 Data를 쓰는 메소드
	private static void sendData( BufferedWriter bufferedWriter, String data ) throws IOException {
		bufferedWriter.write( data );
		bufferedWriter.flush();
	}


	public static void main( String[] args ) throws UnknownHostException, IOException {
		Socket socket = null;

		InputStream inputStream = null;
		InputStreamReader inputStreamReader = null;
		BufferedReader bufferedReader = null;

		OutputStream outputStream = null;
		OutputStreamWriter outputStreamWriter = null;
		BufferedWriter bufferedWriter = null;

		Scanner scanner = null;

		try {
			socket = new Socket( "localhost", 8080 );

			// Socket으로 부터 InputStream을 얻는다.
			inputStream = socket.getInputStream();
			inputStreamReader = new InputStreamReader( inputStream );
			bufferedReader = new BufferedReader( inputStreamReader );

			// Socket으로 부터 OutputStream을 얻는다.
			outputStream = socket.getOutputStream();
			outputStreamWriter = new OutputStreamWriter( outputStream );
			bufferedWriter = new BufferedWriter( outputStreamWriter );

			// 사용자로 부터 입력받은 문자열을 서버로 전송하고,
			// QUIT 문자열 수신 시 프로그램을 종료하고,
			// 나머지는 그대로 화면에 출력한다.
			String data = null;

			scanner = new Scanner( System.in );

			while( true ) {
				System.out.print( ">" );
				data = scanner.nextLine();

				if( data != null && data.length() > 0 ) {
					SimpleClient.sendData( bufferedWriter, data );

					data = SimpleClient.receiveData( bufferedReader );

					if( "QUIT".equalsIgnoreCase( data ) ) {
						System.out.println( "QUIT received." );
						break;
					} else {
						System.out.println( data );
					}
				}
			}

		} finally {
			socket.close();

			bufferedReader.close();
			inputStreamReader.close();
			inputStream.close();

			bufferedWriter.close();
			outputStreamWriter.close();
			outputStream.close();

			scanner.close();
		}

	}

}

실행결과

>Hello World!
ACK 12
>What the...
ACK 11
>exit
QUIT received.

Written with StackEdit.