본문 바로가기

강좌

자바 쓰레드(Thread) - 멀티 태스킹 (Multi-Tasking) 1. 멀티 태스킹 - Multi-Tasking (= 멀티프로세스와 거의 유사함) * 하나의 CPU가 여러 개의 프로세스를 교대로 수행하는것 * 각각의 일을 전담하는 해당 프로그램들이 동시에 실행되고 있다는것을 의미 * 일반적으로 멀티 태스킹을 위해서는 여러 개의 프로세스가 메모리 상에서 동시에 실행 * 현재 운영체제들이 취한 방식은 멀티 프로세스 시스템이다. * 멀티 프로세스 시스템에서 각 프로세스는 동시에 실행되는 것처럼 보이지만, CPU가 하나이기 때문에 , 실은 실행 시간을 잘게 나누어서 각 프로세스들이 돌아가면서 CPU를 점유하고 있는 것이다. * 프로세스간의 이런 CPU의 점유작업을 ProcessScheduling이라고 한다. * 프로세스는 실행중인 프로그램이다. * 스케줄러에 의해 처리되는 가.. 더보기
자바 네트워크(Network) - UDP 예제 2 (멀티캐스트-MulticastSocket) 일단 DatagramSocket클래스의 자식 클래스를 알아보자. DatagramSocket클래스의 자식 클래스는 MutilcastSocket이다. 우선 자바API에서 MulticastSocket을 살펴보자. 가기 귀찮아서 퍼왔다. 잘 해석해서 이넘이 무엇을 하는 넘인지 살펴보자. public class MulticastSocket extends DatagramSocket The multicast datagram socket class is useful for sending and receiving IP multicast packets. A MulticastSocket is a (UDP) DatagramSocket, with additional capabilities for joining "groups" .. 더보기
자바 네트워크(Network) - UDP방식 예제 UDP방식은 TCP와 달리 하나의 소켓으로 통신한다. DatagramSocket이라는 것으로.. 이 클래스에 자세한것은 자바 API를 찾아보자. http://docs.oracle.com/javase/7/docs/api/ 일단 확인 해야 할 부분은 Constructor중 파라미터가 없는건 클라이언트용. 파라미터가 있는건(포트번호) 서버에서 사용할것이라는것만 알아두자. 그리고 DatagramePacket 클래스도 잘 살펴보자. 우선 오늘의 점심 메뉴를 서버에 요청해서 가져 오는걸 해보자. 1. 점심메뉴를 랜덤으로 뽑아줄 클래스를 하나 만들자. 2. 서버를 만들어 보자. 3. 클라이언트를 만들어 보자 자세히 보면 클라이언트와 서버 프로그램이 거의 비슷하다 소켓은 DatagramSocket이라는거 하나만 사용하.. 더보기
자바 네트워크(Network) - Thread를 이용한 TCP/IP 예제 Thread를 이용한 TCP / IP예제이다. 복수의 클라이언트에서 요청 받은 것을 서버에서는 각각 쓰레드를 생성해서 에코형식의 메세지를 클라이언트에게 전달 해 준다. 우선 서버 프로그램 코드를 보자. 이전에 썼던 내용과 다를게 없다. 서버 소켓, 클라이언트용 소켓 생성해서 무한 루프 돌면서 클라이언트 요청을 받는다. 다만 while문에서 쓰레드를 각각 생성해서 쓰레드에서 에코가 되게 요청단위로 처리해 준다. 쓰레드를 구현한 소스를 보자. 쓰레드기 때문에 서버 프로그램에서 클라이언트 요청이 들어 왔을때 생성자로 요청을 읽고 다시 요청응답을 돌려주기 위해서 InputStream과 OutputStream을 생성하였다. 그리고 run에서는 요청 내용을 읽고 다시 클라이언트로 요청내용을 그대로 돌려 준다(에코,.. 더보기
자바 네트워크(Network) - TCP / IP 를 이용한 예제 2 이번에는 저번 소스를 이용해서 서버에서 요청된 클라이언트 정보를 한번 알아 보자. 우선 서버에 접속된 클라이언트의 아이피와 포트번호를 알아보자. 예제를 보면 client .getInetAddress()로 클라이언트 아이피와 getPort()로 클라이언트포트 번호를 알 수 있다. 클라이언트 포트번호는 랜덤으로 바뀐다.(참고 서버 소켓 선언시 생성자 파마리커 2222는 서버 포트 번호이다) 그리고 난후 클라이언트가 접속을 했으면 클라이언트에게 접속했다는 메세지를 전해 주기 위해서 Outputstream 객체와 DataOutputStream 객체(한글이기때문 2바이트) 사용했다. 클라이언트에서는 이를 InputStream과 DataInputStream으로 받으면 된다. 그럼 클라이언트 예제를 보자. 클라이언트.. 더보기
자바 네트워크(Network) - TCP / IP 를 이용한 예제 1 우선 서버에서 준비 할것 ServerSocket 객체와 Client용 Socket생성 서버는 항상 클라이언트의 요청을 기다려야 하기때문에 예제로 무한 루프를 돌면서 기다린다. 클라이언트는 서버에 요청할 Socket만 생성하면 된다. 간단한 예제를 보자. 1. 서버용 프로그램 2. 클라이언트용 프로그램 서버용 콘솔에 클라이언트가 접속했습니다라는 메세지는 클라이언트에서 요청이 오면 서버에서 요청을 받았다는걸 나타내기 위해서 로그를 찍어 봤다. 더보기
자바 네트워크(Network) - 소켓(Socket)동작의 원리 이전에 한것은 네트워크 프로그래밍을 사용할때 자주 사용하는 유틸성 클래스를 살펴 봤다. TCP/IP방식의 기본적인 동작 방식은 아래 그림과 같다. TCP/IP에서 서버에서는 클라이언트 요청을 받아서 데이터 처리를 하는데 우선 서버는 클라이언트 요청을 받아 들이는 소켓이 있다. 일명 서버 소켓 클라이언트에서 소켓생성해서 서버로 접속하면 이를 받는 역할을 하는 소켓이 있는데 이후 곧바로 서버내 다른 소켓으로 자신이 받은 요청을 넘긴다. 그래야 수많은 클라이언트 요청이 을 서버에서 받아 들일수 있다. 소스를 보면 소켓이 두개 생성이 되어 있다면 그건 서버용 프로그램이고 하나면 클라이언트 프로그램이라고 생각하면 된다. 정리하면 서버는 최소한 두개의 소켓이 있어야 한다. ServerSocket과 이를 할당 받을 .. 더보기
자바 네트워크(Network) - URL클래스 사용 일단 InetAddress는 가져오는 데이터가 대충 정해져 있다고 보면 URL은 파일 내용을 그대로 가져 올수 있다. 예를 들어 생각해보자 URL을 이용해서 다른 서버에 파일을 통째로 가져온다면 다른 소프트웨어를 이용해서 그 파일 내용을 볼 수 있다. 웹 브라우저 같은것이 대표적인것 중 하나이다. 예제를 보자. 입력 주소로 네이버를 입력하자 네이버 메인 페이지 html소스를 다 긁어 왔다. 만약 가져온 데이터값을 웹 브라우저로 본다면 네이버 메인 페이지가 나올것이다. 더보기
자바 네트워크(Network) - InetAddress 사용법 InetAddress는 윈도우 운영체제에서 사용되는 네트워크 명령어 nslookup과 비슷하다. 윈도우 도스창을 열어서 nslookup www.miscrosoft.com을 치면 해당 정보를 얻을 수 있다. 한번 해보길.. 다시말하면 InetAddress 클래스는 nslookup과 같은 역할을 한다. 예제는 간단하자. 설명하자면 화면에서 입력받은 주소를 가지고 해당 주소에 접속해서 HostAddress와 HostName을 얻는것이다. 입력 받을때 Scanner 클래스를 사용하였다. 자바 5 부터 지원이 된다.(자바 API 참고) InetAddress 객체를 생성후 getByName메소드를 사용해서 결과 값을 가져왔다. 이게 끝이다.~ 기본에 충실하면 어려운것도 쉽게 할 수 있다.~ 더보기
자바 네트워크(Network) - TCP / IP, UDP 에서 사용할 클래스들 네트워크 프로그래밍시 자바에서는 아래 두개를 중점으로 사용. 1. TCP /IP - ServerSocket (서버) - Socket (클라이언트) 2. UDP - 한 개의 클래스로 둘다 커버 - DatagramSocket (서버, 클라이언트) 패킷을 보낼때 DatagraPacket을 사용 사실상 네트워크는 IO의 연장선이라고 보면 된다. InetAddress, URL 두개의 유틸리티 클래스는 네트워크 프로그래밍시 유용하게 사용된다. 더보기