[Java Tips] DatagramSocket을 이용한 간단한 UDP 서버/클라이언트 구현
Posted at 2009/10/22 12:08 // in Java Tips // by FrogInPot
이번 팁에서는 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 서버는 다음과 같습니다.
01.import java.io.IOException;02.import java.net.DatagramPacket;03.import java.net.DatagramSocket;04.import java.net.SocketException;05. 06.public class DatagramServer extends Thread {07. 08.private DatagramSocket socket;09. 10.public DatagramServer() throws SocketException {11.super();12. 13.// DatagramPacket을 받기 위한 Socket 생성14.// 9999 : Listen할 Port15.socket = new DatagramSocket(9999);16.}17. 18.public void run() {19.while (true)20.{21.try22.{23.// 데이터를 받을 버퍼24.byte[] inbuf = new byte[256];25. 26.// 데이터를 받을 Packet 생성27.DatagramPacket packet = new DatagramPacket(inbuf, inbuf.length);28. 29.// 데이터 수신30.// 데이터가 수신될 때까지 대기됨31.socket.receive(packet);32. 33.// 수신된 데이터 출력34.System.out.println("received length : " + packet.getLength() + ", received data : "35.+ new String(packet.getData(), 0, packet.getLength()));36.} catch (IOException e)37.{38.e.printStackTrace();39.}40.}41.}42. 43.public static void main(String args[]) throws SocketException{44.DatagramServer server = new DatagramServer();45.server.start();46.}47.}클라이언트는 마찬가지로, DatagramSocket과 DatagramPacket을 이용하여 데이터를 전송하며 순서는 다음과 같습니다.
1. DatagramSocket 생성 ; 생성 시, Packet을 전송할 Server IP, PORT 정보 전달
2. DatagramPacket 생성 및 데이터 입력 : 전송할 Packet을 생성하고, 데이터를 입력
3. DatagramSocket.send 호출 : 전송할 Packet을 send method로 전송
간단한 클라이언트 소스는 다음과 같습니다.
01.import java.io.IOException;02.import java.net.DatagramPacket;03.import java.net.DatagramSocket;04.import java.net.InetAddress;05.import java.net.SocketException;06.import java.net.UnknownHostException;07. 08.public class DatagramClient extends Thread {09. 10.public DatagramClient() {11.super();12.}13. 14.public void run() {15.try16.{17.while (true)18.{19.// 전송할 데이터 : 현재 시간20.String data = String.valueOf(System.currentTimeMillis());21. 22.// 전송할 DatagramPacket 생성23.DatagramPacket packet = new DatagramPacket(data.getBytes(), data.getBytes().length, InetAddress24..getByName("127.0.0.1"), 9999);25. 26.// DatagramSocket 생성27.DatagramSocket socket = new DatagramSocket();28. 29.// DatagramPacket 전송30.socket.send(packet);31.}32.} catch (UnknownHostException e)33.{34.e.printStackTrace();35.} catch (SocketException e)36.{37.e.printStackTrace();38.} catch (IOException e)39.{40.e.printStackTrace();41.}42.}43. 44.public static void main(String args[]) {45.DatagramClient client = new DatagramClient();46.client.start();47.}48.}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
'Java Tips' 카테고리의 다른 글
| [Java Tips] LineNumberReader를 이용해 손쉽게 Line Number 추출하기 (0) | 2009/12/29 |
|---|---|
| [Java Tips] Logger 설정을 Properties File로 처리하는 법 (0) | 2009/12/29 |
| [Java Tips] DatagramSocket을 이용한 간단한 UDP 서버/클라이언트 구현 (0) | 2009/10/22 |
| [Java Tips] Localhost의 IP, Hostname을 알아내는 법 (0) | 2009/10/22 |
| [Java Tips] 도메인(Domain)을 IP로 변환하는 법 (0) | 2009/10/22 |
| [Java Tips] 날짜 비교하는 법 (0) | 2009/10/21 |