소스코드
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.