강좌 & 팁
글 수 2,412
2013.10.24 20:31:23 (*.216.121.168)
41364
안녕하세요. 정말정말 오래간만에 글을쓰네요.^^
오래간만에 올리는 글이라 어떤글을 올릴까 고민을 많이 했습니다.
지식의 깊이가 누구말처럼 종이 습자지 두께만한 깊이를 갖고 있어 어디다 내놔도 창피할만한 지식리이라...^^;
그래도 용기내어 적어봅니다.
깊지 않은 지식이므로 읽는분들께서는 알아서 필터링해 주시기 바랍니다.
이번시간부터 JAVA네트워크 프로그램을 몇주에 걸쳐 올려 보겠습니다.
그 첫번째로, Tcp서버를 Java네트워크 프로그램으로 만들어 보겠습니다.
TCP/IP에 대해서는 굳이 설명을 안하겠습니다. 왜? 지식이 얇으니까......^^;;
아래와 같은 클래스와 순서로 만들어 보겠습니다.
- 필요한 클래스
- ServerSocket
- Socket
- OutputStream
- InputStreamReader
- BufferedReader
- 순서
- 서버소켓 만들기
- 접속 대기
- 클라이언트 데이터 읽기
- 클라이언트에 응답 메서지 송신
- 클라이언트 접속 끊기
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class TcpServer implements Runnable{ private ServerSocket server = null; public TcpServer(int port) { try { System.out.println("server port : "+port); server = new ServerSocket(port); } catch (IOException e) { System.err.println("Server Socket Open error..............!!"); System.err.println(port+" 포트는 이미 사용중 입니다."); System.exit(1); // 종료 } } @Override public void run() { while (true) { try { System.out.println("\n 접속을 기다 립니다.....!"); // 클라이언트 접속 대기 Socket socket = server.accept(); System.out.println(socket.getInetAddress() + " 로 부터 접속하였습니다."); // 출력 스트림 // 접속한 클라이언트에 데이터를 전송. OutputStream out = socket.getOutputStream(); // 입력 스트림 // 클라이언트 에서 보낸 데이터를 받음. BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream())); // 클라이언트 데이터 읽기 String line = in.readLine(); System.out.println("받은 데이터 : " + line); // 데이터를 받은후 응답 메세지 송신 out.write("OK \n".getBytes()); out.flush(); // 클라이언트의 접속을 끊음. out.close(); in.close(); socket.close(); } catch (Exception e) { System.err.println(e); } } } /** * @param args */ public static void main(String[] args) { Thread server = new Thread(new TcpServer(1004)); server.start(); } }
[실행결과]
소스내에 커멘트도 있지만 조금 간단하게 설명하면 ServerSocket을 열어 클라이언트의 접속을 기다리고
클라이언트가 접속하면 Socket을 취득해 Soket에 있는 InputStream과 OutStream을 가지고 클라이언트에 송신하고
클라이언트 데이터를 받고 하는 아주 간단한 소스입니다.
네트워크 프로그램은 Server하나만으로는 아무것도 할 수가 없습니다.
Server는 그냥 클라이언트가 접속할때까지 마냥 기다립니다.
다음 시간에 TcpClient를 만들어 통신을 해보겠습니다.
감사합니다.