개인참고자료 71

UPD 프로그래밍

UDP를 이용한 프로그래밍 방법 UDP(User Datagram Protocol)는 데이터그램 통신 프로토콜이라고도 한다. UDP는 TCP와는 다르게 비연결성(connectionless) 프로토콜이다. 즉, TCP 처럼 미리 연결을 맺고 통신하는 방식이 아니다. 데이터그램은 보통 패킷(packet)이란 용어로 교체되어 사용된다. 패킷이란 인터넷 내에서 운반되어야 할 메시지 단위이다. UDP는 패킷을 보낼 때마다 수신측의 주소와 로컬 파일 설명자를 함께 전송해야 한다. 이런 이유로 UDP는 전송해야 할 데이터 외에 추가적인 데이터가 함께 전송되어야한다. 또한 UDP는 TCP와는 다르게 비연결성이기 때문에 패킷이 수신 측에 전송한 순서대로 도달하지 않는 문제가 발생할 수도 있다. (그러나 네트워크가 근거리일..

TCP 프로그래밍 - 객체 직렬화를 이용한 네트워크 프로그래밍(계산기)

객체 직렬화를 이용한 네트워크 프로그래밍 객체 직렬화란 말 그대로 객체를 일렬로 늘어선 바이트의 흐름으로 만드는 기술을 말한다. 이 때 사용하는 IO객체가 ObjectOutputStream과 ObjectInputStream이다. 네트워크 프로그래밍에서도 ObjectOuputStream과 ObjectInputStream을 이용해서 소켓을 통해서 객체를 주고받을 수 있다. 객체 직렬화를 이용해서 각ㄴ단한 계산을 행하는 클라이언트 / 서버 프로그램인데, 클라이언트는 접속에 성공한 후 SendData에 숫자 두개와 연산자를 저장해서 서버에 전송한다. 서버는 전달받은 SendData 객체로부터 숫자 두 개와 연산자를 읽어와서 계산한 후 클라이언트 에게 결과 값을 문자열로 전송하는 프로그램이다. 직렬화 가능 객체 ..

TCP 프로그래밍 - 윈도우용 채팅 클라이언트(AWT를 이용)

윈도우용 채팅 클라이언트 채팅 서버를 사용하는 윈도우용 클라이언트를 작성한다. 윈도우 채팅 클라이언트 작성 개요 윈도우용 클라이언트의 작성 방법을 배우려면 먼저 윈도우용 클라이언트의 동작 원리에 대해서 이해해야 한다. 명령 창에서 실행되는 채팅 클라이언트의 경우, 문장을 전송하기 위해서 한 줄의 끝을 의미하는 엔터 키를 입력했다 하지만 윈도우 용 클라이언트는 텍스트 입력 창에서 엔터키를 눌렀다는 이벤트를 처리하는 부분에서 문장을 전송해야 한다. 또한 명령 창에서 실행되는 채팅 클라이언트 서버로부터 전송 받을 문자열을 단순히 화면에 출력했지만, 윈도우용 클라이언트는 서버로 전송 받은 문자열을 TextArea 등에 보여지게 해야한다. import java.awt.*; import java.awt.event...

TCP 프로그래밍 - 간단한 채팅 클라이언트 / 서버 프로그래밍

간단한 채팅 클라이언트 / 서버 프로그래밍 채팅 프로그래밍을 하기 전에 클라이언트의 동작 방법부터 정의하자. 채팅 클라이언트는 다음과 같은 방식으로 동작한다. 1. 채팅 클라이언트를 실행할 때 사용자의 아이디와 접속할 서버의 IP 주소를 전달한다. 2. 다른 클라이언트가 접속하면, "XXX님이 접속했습니다."란 메세지를 출력한다. 3. 다른사람의 대화 내용이 클라이언트에서 키보드로 입력하는 중에도 전달되어 화면에 출력된다. 4. 클라이언트에서 키보드로 문장을 입력한 후 엔터 키를 입력하면, 접속된 모든 클라이언트에 입력된 문자열이 전송된다. 5. 클라이언트를 종료하면 "XXX님이 접속 종료했습니다."란 메시지를 출력한다. 위의 클라이언트의 동작에 대한 정의를 보면 클라이언트는 다음과 같은 내용을 서버에 ..

TCP 프로그래밍 - 간단한 웹 서버

브라우저의 요청 정보 출력 브라우저가 웹 서버에게 요청정보를 보낸다는 것은 일단 웹 서버에 연결된다는 것을 의미한다. 따라서 성공적으로 연결되면 브라우저는 웹 서버에게 요청정보를 전달하게 된다. 이와 같은 원리를 이용해서 브라우저가 요청한 정보를 단순히 화면에 출력하는 프로그램이다. 즉, 응답은 보내지 않고 요청정보만 읽어 들여 출력하는 프로그램이다. import java.net.*; import java.io.*; public class SimpleWebServerBasic { public static void main(String[] args) { Socket sock = null; BufferedReader br = null; try{ ServerSocket ss = new ServerSocket(..

TCP 프로그래밍 - 멀티스레드를 이용한 에코 서버

멀티스레드를 이용한 에코 서버 서버가 클라이언트 여러 개를 동시에 처리하지 못하는 점을 해결하는 몇가지 방법이 있다. 그 중 한 가지 방법인 스레드를 이용한 방법을 사용한다. 서버는 연결된 클라이언트의 수만큼 소켓을 가지게 되는데, 각각의 소켓은 각각 별개로 동작해야 한다. 서버는 accept()로 대기하고 있다가 클라이언트가 접속하게되면 socket 객체를 반환하게 된다. 반환 받은 소켓은 스레드의 생성자에 전달된다. 그리고나서 스레드 객체를 시작하고 다시 메인 스레드는 accept()로 대기하게 된다. 실제로 클라이언트와 통신을 하는 것은 스레드 객체의 run() 메소드 안에서 일어난다. 멀티스레드 에코 서버 프로그래밍 import java.net.*; import java.io.*; public c..

TCP 프로그래밍 - 간단한 에코 클라이언트/서버 프로래밍

간단한 에코 클라이언트/서버 프로래밍 에코(Echo)는 말 그대로 메이리를 의미한다. 클라이언트가 보낸 데이터를 서버 쪽에서 받아들여, 클라이언트에게 그대로 다시 보내주는 것을 의미한다. 에코 클라이언트와 서버는 각각 다음과 같은 방식으로 동작한다. 에코서버 1. 10001번 포트에서 동작하는 ServerSocket을 생성한다. 2. ServerSocket의 accept() 메소드를 실행해서 클라이언트의 접속을 대기한다. 3. 클라이언트가 접속할 경우 accept() 메소드는 Socket 객체를 반환한다. 4. 반환 받은 Socket으로 InputStream과 OutputStream을 구한다. 5. InputStream은 BufferedReader 형식으로 변환하고 OutputStream은 PrintWr..

TCP 프로그래밍

TCP(Transfer Control Protocol) 프로그래밍 기본 TCP는 다른 말로 스트림 통신 프로토콜이라고 부르며, TCP 통신을 하려면 양쪽의 소켓이 연결된 상태여야만 가능하다. 그렇기 때문에 연결지향 프로토콜이라고도 한다. TCP 프로그래밍에서 가장 중요한 클래스는 java.net.ServerSocket과 java.net.Socket이다. ServerSocket은 서버 쪽에서 클라이언트의 접속을 대기하기 위해서 반드시 필요한 클래스며, Socket은 서버와 클라이언트가 통신하기 위해서 반드시 필요한 클래스다. TCP방법을 이용해서 클라이언트와 서버가 통ㅇ신하려면 양쪽에 Socket 객체가 있어야 한다. 이때 소켓을 생성하는 방법은 클라이언트 쪽과 서버쪽이 다르다. 서버와 클라이언트의 가장 ..

InetAddress 클래스를 활용한 도메인과 IP 변환(nslookup 구현)

윈도우나 유닉스 운영체제에서는 도메인 주소를 IP 주소를 구하거나 반대로 IP 주소를 이용해서 도메인 주소를 알아내는 프로그램을 제공한다. 해당 프로그램의 이름은 nslookup이다. 실행된 결과는 원래 www.yahoo.com에 대응되는 IP를 여러 개가 나와야 하나 주소창 뒤에 .local이 붙어 하나만 출력되었다. 실제로는 대응되는 IP가 여러 개이다. getAllByName() 메소드의 수행 결과가 배열로 나오는 것은 IP가 여러 개가 존재할 수 있기 때문이다. InetAddress 클래스를 이용한 nslookup 명령 구현 InetAddress는 IP나 도메인을 이용해서 여러 가지 유용한 정보를 얻을 수 있는 클래스이다. nslookup 명령을 구현하고 실행하기 위한 순서 1. InetAddre..

InetAddress 클래스

InetAddress 클래스 네트워크 내에서 컴퓨터 간에 통신을 하려면 IP 주소를 알고 있어야 한다. java.net 패키지에는 IP와 관련된 중요한 클래스가 있는데, 바로 InetAddress다. InetAddress는 도메인 주소를 IP 주소로 변환하거나 반대로 IP 주소를 도메인 주소로 변경할 수 있으며, 문자열이나 바이트 배열 형태로 IP주소에 대한 정보를 얻을 수도 있다. 또한 현재 컴퓨터의 이름도 구할 수 있다. InetAddress 객체는 생성자를 이용해서 객체를 생성하지 않고, 정적(static)인 특성이 있다는 다음의 메소드를 이용해서 객체를 생성한다. InetAddress가 사용되는 메소드 메소드 설명 static InetAddress[] getAllByName(String host)..