자바에서는 UDP 통신을 위해서 DatagramSocket과 DatagramPacket을 제공합니다.
이번 팁에서는 DatagramSocket과 DatagramPacket을 이용하여 간단한 UDP 서버/클라이턴트를 구현해 보겠습니다.
UDP 통신을 위해서는 UDP 패킷을 받을 서버 Socket이 생성되어야 합니다.
Socket 생성 시는 다음과 같은 순서로 수행합니다.
1. DatagramSocket 생성 : 생성 시, Listen할 Port 지정
2. DatagramPacket 생성 : 데이터를 수신할 그릇이 되는 DatagramPacket 생성
3. DatagramSocket.receive() 호출 : 생성된 Socket의 receive method를 생성된 packet object를 파라미터로 하여 호출. receive method는 호출 후, packet이 수신될 때까지 대기를 하게 됨
간단하게 구현한 UDP 서버는 다음과 같습니다.
received length : 13, received data : 1256179996593
received length : 13, received data : 1256179996609
received length : 13, received data : 1256179996609
received length : 13, received data : 1256179996609
received length : 13, received data : 1256179996609
received length : 13, received data : 1256179996609
received length : 13, received data : 1256179996609
received length : 13, received data : 1256179996609
received length : 13, received data : 1256179996640
received length : 13, received data : 1256179996640
received length : 13, received data : 1256179996640
received length : 13, received data : 1256179996640
이번 팁에서는 DatagramSocket과 DatagramPacket을 이용하여 간단한 UDP 서버/클라이턴트를 구현해 보겠습니다.
UDP 통신을 위해서는 UDP 패킷을 받을 서버 Socket이 생성되어야 합니다.
Socket 생성 시는 다음과 같은 순서로 수행합니다.
1. DatagramSocket 생성 : 생성 시, Listen할 Port 지정
2. DatagramPacket 생성 : 데이터를 수신할 그릇이 되는 DatagramPacket 생성
3. DatagramSocket.receive() 호출 : 생성된 Socket의 receive method를 생성된 packet object를 파라미터로 하여 호출. receive method는 호출 후, packet이 수신될 때까지 대기를 하게 됨
간단하게 구현한 UDP 서버는 다음과 같습니다.
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class DatagramServer extends Thread { private DatagramSocket socket; public DatagramServer() throws SocketException { super(); // DatagramPacket을 받기 위한 Socket 생성 // 9999 : Listen할 Port socket = new DatagramSocket(9999); } public void run() { while (true) { try { // 데이터를 받을 버퍼 byte[] inbuf = new byte[256]; // 데이터를 받을 Packet 생성 DatagramPacket packet = new DatagramPacket(inbuf, inbuf.length); // 데이터 수신 // 데이터가 수신될 때까지 대기됨 socket.receive(packet); // 수신된 데이터 출력 System.out.println("received length : " + packet.getLength() + ", received data : " + new String(packet.getData(), 0, packet.getLength())); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String args[]) throws SocketException{ DatagramServer server = new DatagramServer(); server.start(); } }
클라이언트는 마찬가지로, DatagramSocket과 DatagramPacket을 이용하여 데이터를 전송하며 순서는 다음과 같습니다.
1. DatagramSocket 생성 ; 생성 시, Packet을 전송할 Server IP, PORT 정보 전달
2. DatagramPacket 생성 및 데이터 입력 : 전송할 Packet을 생성하고, 데이터를 입력
3. DatagramSocket.send 호출 : 전송할 Packet을 send method로 전송
간단한 클라이언트 소스는 다음과 같습니다.
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; public class DatagramClient extends Thread { public DatagramClient() { super(); } public void run() { try { while (true) { // 전송할 데이터 : 현재 시간 String data = String.valueOf(System.currentTimeMillis()); // 전송할 DatagramPacket 생성 DatagramPacket packet = new DatagramPacket(data.getBytes(), data.getBytes().length, InetAddress .getByName("127.0.0.1"), 9999); // DatagramSocket 생성 DatagramSocket socket = new DatagramSocket(); // DatagramPacket 전송 socket.send(packet); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String args[]) { DatagramClient client = new DatagramClient(); client.start(); } }
Output :
received length : 13, received data : 1256179996593
received length : 13, received data : 1256179996609
received length : 13, received data : 1256179996609
received length : 13, received data : 1256179996609
received length : 13, received data : 1256179996609
received length : 13, received data : 1256179996609
received length : 13, received data : 1256179996609
received length : 13, received data : 1256179996609
received length : 13, received data : 1256179996640
received length : 13, received data : 1256179996640
received length : 13, received data : 1256179996640
received length : 13, received data : 1256179996640
'시즌1 > Java Tips' 카테고리의 다른 글
[Java Tips] LineNumberReader를 이용해 손쉽게 Line Number 추출하기 (0) | 2009.12.29 |
---|---|
[Java Tips] Logger 설정을 Properties File로 처리하는 법 (0) | 2009.12.29 |
[Java Tips] Localhost의 IP, Hostname을 알아내는 법 (0) | 2009.10.22 |
[Java Tips] 도메인(Domain)을 IP로 변환하는 법 (0) | 2009.10.22 |
[Java Tips] 날짜 비교하는 법 (0) | 2009.10.21 |