program/java
[java] 소켓 프로그래밍 - Server & Client 예제
베짱2
2012. 9. 28. 14:34
반응형
클라이언트에서 1 + 2 를 보내면
서버에서 처리후 결과를 보내어 줌.
Q1_Client.java
import java.io.*; import java.net.*; public class Q1_Client { public static void main( String args[] ) throws IOException { BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) ); Socket sock = null; // 접속할 소켓 DataInputStream read; // READ 스트림 DataOutputStream write; // WRITE 스트림 // int recv_int; // 서버로부터 받을 변수값 String send_str = "", recv_str = ""; // 서버에게 보낼 문자열 try { sock = new Socket( "127.0.0.1", 60000 ); // 소켓과 스트림결합 read = new DataInputStream( sock.getInputStream() ); // READ STREAM // 연결 write = new DataOutputStream( sock.getOutputStream() ); // WRITE // STREAM 연결 System.out.println( "*************** 접속성공! ***************" ); // 서버로부터 정수형 값을 받는과정 // recv_int = read.readInt(); // System.out.println("서버왈 : " + recv_int); while( true ) { // 서버에게 문자열 값을 전달하는과정 System.out.print( "연산식 : " ); send_str = in.readLine(); try { write.writeUTF( send_str ); } catch( Exception e ) { } // 결과 받기 try { recv_str = read.readUTF(); } catch( Exception e ) { } System.out.println( "결과값 : " + recv_str ); } } catch( IOException e ) { e.printStackTrace(); } } }
Q1_Server.java
import java.net.*; import java.io.*; public class Q1_Server { public static void main( String args[] ) throws IOException { ServerSocket serv_sock; Socket acp_sock = null; DataInputStream read; DataOutputStream write; String recv_str = null; double digit1 = 0, digit2 = 0; String result = ""; try { serv_sock = new ServerSocket( 60000, 10 ); // System.out.println("클라이언트의 접속을 기다리기 시작합니다."); while( true ) { System.out.println( "클라이언트의 접속을 기다리기 시작합니다." ); acp_sock = serv_sock.accept(); // 접속수락 소켓 // 스트림을 소켓과 결합 read = new DataInputStream( acp_sock.getInputStream() ); // READ // STREAM // 연결 write = new DataOutputStream( acp_sock.getOutputStream() ); // WRITE // STREAM // 연결 System.out.println( "클라이언트 접속: " + acp_sock.getInetAddress().getHostName() ); System.out.println( "클라이언트로부터 응답을 기다립니다." ); while( true ) { // 클라이언트로부터 STRING형 정보를 받는과정 try { recv_str = read.readUTF(); } catch( Exception e ) { // recv_str 값이 null일때 접속 종료 System.out.println( "*************** 접속종료 ***************" ); break; } System.out.println( "클라이언트에서 온 메세지 : " + recv_str ); // ///////////////////// try { if( recv_str.indexOf( "+" ) != -1 ) { digit1 = Integer.parseInt( recv_str.substring( 0, recv_str.indexOf( "+" ) ).trim() ); digit2 = Integer.parseInt( recv_str.substring( recv_str.indexOf( "+" ) + 1, recv_str.length() ).trim() ); result = digit1 + " + " + digit2 + " = " + ( digit1 + digit2 ); } else if( recv_str.indexOf( "-" ) != -1 ) { digit1 = Integer.parseInt( recv_str.substring( 0, recv_str.indexOf( "-" ) ).trim() ); digit2 = Integer.parseInt( recv_str.substring( recv_str.indexOf( "-" ) + 1, recv_str.length() ).trim() ); result = digit1 + " - " + digit2 + " = " + ( digit1 - digit2 ); } else if( recv_str.indexOf( "/" ) != -1 ) { digit1 = Integer.parseInt( recv_str.substring( 0, recv_str.indexOf( "/" ) ).trim() ); digit2 = Integer.parseInt( recv_str.substring( recv_str.indexOf( "/" ) + 1, recv_str.length() ).trim() ); // 0으로 나눌 수 없음 if( digit2 == 0 ) { result = "에러 \"0으로 나눌수 없습니다\""; } else { result = digit1 + " / " + digit2 + " = " + ( digit1 / digit2 ); } } else if( recv_str.indexOf( "*" ) != -1 ) { digit1 = Integer.parseInt( recv_str.substring( 0, recv_str.indexOf( "*" ) ).trim() ); digit2 = Integer.parseInt( recv_str.substring( recv_str.indexOf( "*" ) + 1, recv_str.length() ).trim() ); result = digit1 + " * " + digit2 + " = " + ( digit1 * digit2 ); } else if( recv_str.indexOf( "+" ) == -1 || recv_str.indexOf( "-" ) == -1 || recv_str.indexOf( "*" ) == -1 || recv_str.indexOf( "/" ) == -1 ) { result = "연산식이 없습니다."; } } catch( Exception e ) { result = "연산식에 오류가 있습니다."; } // ///////////////////// try { write.writeUTF( result ); } catch( Exception e ) { } } } } catch( IOException e ) { e.printStackTrace(); } finally { acp_sock.close(); } } }
반응형