자바 썸네일형 리스트형 [Java] UDP 소켓 프로그래밍 TCP 소켓 프로그래밍에서는 Socket과 ServerSocket을 사용하지만, UDP 소켓 프로그래밍에서는 DatagramSocket과 DatagramPacket을 사용한다. 앞서 살펴본 바와 같이 UDP는 연결지향적인 프로토콜이 아니기 때문에 ServerSocket이 필요하지 않다. UDP 통신에서 사용하는 소켓은 DatagramSocket이며 데이터를 DatagramPacket에 담아서 전송한다. DatagramPacket은 헤더와 데이터로 구성되어 있으며, 헤더에는 DatagramPacket을 수신할 호스트의 정보(호스트의 주소와 포트)가 저장되어 있다. 소포(packet)에 수신할 상대편의 주소를 적어서 보내는 것과 같다고 이해하면 된다. 그래서 DatagramPacket을 전송하면 Datagr.. 더보기 [Java] 소켓 프로그래밍 - TCP와 UDP 소켓 프로그래밍은 소켓을 이용한 통신 프로그래밍을 뜻하는데, 소켓(socket)이란 프로세스간의 통신에 사용되는 양쪽 끝단(endpoint)를 의미한다. 서로 멀리 떨어진 두 사람이 통신하기 위해서 전화기가 필요한 것처럼, 프로세스 간의 통신을 위해서는 그 무언가가 필요하고 그것이 바로 소켓이다. 자바에서는 java.net 패키지를 통해 소켓 프로그래밍을 지원하는데, 소켓통신에 사용되는 프로토콜에 따라 다른 종류의 소켓을 구현하여 제공한다. TCP와 UDP TCP/IP 프로토콜은 이기종 시스템간의 통신을 위한 표준 포로토콜로 프로토콜의 집합이다. TCP와 UDP 모두 TCP/IP 프로토콜에 포함되어 있으며, OSI 7계층의 전송계층(transport layer)에 해당하는 프로토콜이다. TCP와 UDP는.. 더보기 [Java] URL, URLConnection URL URL(Uniform Resource Locator)은 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것으로 '프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링#참조' 의 형태로 이루어져 있다. |참고| URL에서 포트번호, 쿼리, 참조는 생략할 수 있다. http://www.codechobo.com:80/sample/hello.html?referer=codechobo#index1 프로토콜 자원에 접근하기 위해 서버와 통신하는데 사용되는 통신규약(http) 호스트명 자원을 제공하는 서버의 이름(www.codechobo.com) 포트번호 통신에 사용되는 서버의 포트번호(80) 경로명 접근하려는 자원이 저장된 서버상의 위치(/sample/) 파일명 접근하려.. 더보기 [Java] IP주소(IP Address), InetAddress IP주소는 컴퓨터(호스트, host)를 구별하는데 사용되는 고유한 값으로 인터넷에 연결된 모든 컴퓨터는 IP주소를 갖는다. IP주소는 4 byte(32 bit)의 정수로 구성되어 있으며, 4개의 정수가 마침표를 구분자로 'a.b.c.d'와 같은 형식으로 표현된다. 여기서 a, b, c, d는 부호없는 1 byte값, 즉 0 ~ 255 사이의 정수이다. IP주소는 다시 네트워크주소와 호스트주소로 나눌 수 있는데, 32 bit(4 byte)의 IP주소중에서 네트워크주소와 호스트주소가 각각 몇 bit를 차지하는지는 네트워크를 어떻게 구성하였는지에 따라 달라진다. 그리고 서로 다른 두 호스트의 IP주소의 네트워크주소가 같다는 것은 두 호스트가 같은 네크워크에 포함되어 있다는 것을 의미한다. 윈도우 OS에서 호스.. 더보기 [Java] 직렬화 가능한 클래스의 버전관리 직렬화된 객체를 역직렬화할 때는 직렬화했을 때와 같은 클래스를 사용해야 한다. 그러나 클래스의 이름이 같더라도 클래스의 내용이 변경된 경우 역직렬화는 실패하며 예외가 발생한다. java.io.InvalidClassException: UserInfo; local class incompatible: stream classdesc serialVersionUID = 6953673583338942489, local class serialVersion UID = -6256164443556992367 ... 위 예외 내용은 직렬화할 때와 역직렬화할 때의 클래스의 버전이 같아야 하는데 다르다는 것이다. 객체가 직렬화될 때 클래스에 정의된 멤버들의 정보를 이용해서 serialVersionUID라는 크래스의 버전을 자동생.. 더보기 [Java] 직렬화가 가능한 클래스 만들기 - Serializable, transient 직렬화가 가능한 클래스를 만드는 방법은 간단하다. 직렬화하고자 하는 클래스가 java.io.Serializable 인터페이스를 구현하도록 하면 된다. 예를들어 다음과 같이 UserInfo 클래스가 있을 때, 이 클래스를 직렬화가 가능하도록 변경하려면 Serializable 인터페이스를 구현하도록 변경하면 된다. // 변경 전 public class UserInfo { String name; String password; int age; } // 변경 후 public class UserInfo implements java.io.Serializable { String name; String password; int age; } Serializable 인터페이스는 아무런 내용도 없는 빈 인터페이스이지만, 직렬.. 더보기 [Java] 직렬화(Serialization) 직렬화란? 직렬화(serialization)란 객체를 데이터 스트림으로 만드는 것을 뜻한다. 다시 얘기하면 객체에 저장된 데이터를 스트림에 쓰기(write)위해 연속적인(serial) 데이터로변환하는 것을 말한다. 반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화(deserialization)라고 한다. 직렬화라는 용어 때문에 괜히 어렵게 느껴질 수 있는데 사실 객체를 저장하거나 전송하려면 당연히 이렇게 할 수 밖에 없다. 이미 앞서 객체에 대해서 설명했지만, 여기서 객체란 무엇이며, 객체를 저장한다는 것은 무엇을 의미하는가에 대해서 다시 한 번 정리하고 넘어가는 것이 좋을 것 같다. 객체는 클래스에 정의된 인스턴스변수의 집합이다. 객체에는 클래스변수나 메서드가 포함되지 않는다. 객체는 .. 더보기 [Java] 입출력 I/O - File 파일은 기본적이면서도 가장 많이 사용되는 입출력 대상이기 때문에 중요하다. 그래서 관련된 기본적인 내용뿐만 아니라 다양한 활용 예제들을 볼것이다. 그래서 이번 글은 굉장히 길 것이다. 하지만, 이들을 응용해서 다양한 예제들을 만들어 보면 굉장히 도움이 될 것이다. 자바에서는 File 클래스를 통해서 파일과 디렉토리를 다룰 수 있도록 하고 있다. 그래서 File인스턴스는 파일일 수도 있고, 디렉토리일 수도 있다. 앞으로 File클래스의 생성자와 메서드를 관련된 것들끼리 나누어서 예제와 함께 알아보자. 먼저 File의 생성자와 경로에 관련된 메서드를 알아보자. 생성자 / 메서드 설명 File(String fileName) 주어진 문자열(fileName)을 이름으로 갖는 파일을 위한 File인스턴스를 생성한다.. 더보기 이전 1 2 3 4 ··· 15 다음