Java에 입문하는 초보 프로그래머/개발자를 위하여 이번엔 지난번 Socket을 이용한 서버/클라이언트에 이어 DatagramSocket을 이용한 UDP 서버/클라이언트에 대한 부분을 다뤄보려 합니다.


[MyDatagramServer.java]

import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
* Created by 진우 on 2016-07-09.
*/
public class MyDatagramServer {
public static void main(String[] args) {
MyDatagramServer serv = new MyDatagramServer();
serv.startDatagramServer();
}

public void startDatagramServer() {
DatagramSocket sockserv = null;
try {
sockserv = new DatagramSocket(9629);
int bufferLength = 256;
byte[] buffer = new byte[bufferLength];
DatagramPacket packet = new DatagramPacket(buffer, bufferLength);

while(true) {
System.out.println("Server: Waiting for request");
sockserv.receive(packet);
int dataLength = packet.getLength();
System.out.println("Server: received. Data Length="+dataLength);

String data = new String(packet.getData(), 0, dataLength);
System.out.println("Received data:"+data);
if(data.equals("End of Test")) {
System.out.println("Stop Datagram Server");
break;
}
System.out.println("---------");
}
} catch(Exception e) {
e.printStackTrace();
} finally {
if(sockserv != null) {
try {
sockserv.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

 서버에서는 Client를 Listen할 포트를 9629로 지정합니다. 그리고 DatagramPacket을 생성하여 데이터를 주고받게 됩니다. 전체적인 구조는 지난번의 Socket을 이용하는 구조와 유사합니다. receive() 메소드를 이용하여 패킷을 받을 때까지 대기하게 됩니다.


[MyDatagramClient.java]

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
* Created by 진우 on 2016-07-09.
*/
public class MyDatagramClient {
public static void main(String[] args) {
MyDatagramClient cli = new MyDatagramClient();
cli.sendDatagram();
}

public void sendDatagram() {
for(int loop = 1; loop <= 5; loop++) {
sendDatagramData("Just Test Client - Server (" + loop + ")");
}
sendDatagramData("End of Test");
}

public void sendDatagramData(String data) {
try {
DatagramSocket sockcli = new DatagramSocket();
InetAddress addr = InetAddress.getByName("127.0.0.1");
byte[] buffer = data.getBytes();

DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length, addr, 9629);
sockcli.send(packet);
System.out.println("Client:Sent data!");
sockcli.close();
Thread.sleep(1000);
} catch(Exception e) {
e.printStackTrace();
}
}
}

 Client에서는 DatagramSocket을 생성하고, 패킷을 통해 해당되는 IP와 PORT로 패킷을 send() 메소드를 통하여 전송하게 됩니다.


WRITTEN BY
SiriusJ

,