- UDP는 DatagramSocket 와 DatagramPacket를 사용하여 데이터를 전송한다는 것만 알면 됩니다.
- DatagramSocket은 DatagramPacket를 전송하거나 수신 받기 위해 사용 합니다.
- DatagramPacket은 UDP 통신에서 데이터를 담아서 전송하거나 받기 위해 사용 합니다.
◆ 장점
- 복잡하지 않음
- 시스템 로드를 줄일 수 있음
- 빠름
◆ 단점
- 데이타 손실이 있을 수 있음
Client 예제
public class BroadClient {
public BroadClient() {
new Thread(new ReadThread()).start();
}
class ReadThread implements Runnable {
DatagramSocket ds = null;
DatagramPacket packet = null;
byte[] brr = new byte[200];
public void run() {
try {
ds = new DatagramSocket(12345); // 서버 port를 맞춘다.
packet = new DatagramPacket(brr, brr.length);// brr : 데이터그램 패킷을 수신할 바이트 배열, brr.length:데이터그램 수신 크기.
while (true) {
ds.receive(packet); // 블럭 되어 있는 부분.
System.out.println("받은 문자열 : "+ new String(packet.getData())); // 바이트로 받은 내용을 문자로바꾼다.
System.out.println(packet.getAddress().getHostAddress());// 보낸사람 address를 알 수 있다.
Thread.yield();
}
} catch (Exception e) {
System.out.println("받기 오류 :" + e);
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new BroadClient();
}
}
- 수신받는 부분의 DatagramPacket 부분입니다. packet = new DatagramPacket(brr, brr.length)
- ds.receive(packet) 부분이 Server에서 데이타를 받는 부분입니다. 데이터를 받을때까지 블럭 되어있습니다.
Server 예제
public class BroadServer {
boolean onAir = false;
DatagramSocket ds;
DatagramPacket packet;
int port = 12345;// 받을 사람 port // 상용화 포트(1024 ~ 10000)
InetAddress address;
public BroadServer() {
HowServer server = new HowServer();
Thread trd = new Thread(server);
onAir = true;
trd.start();
}
static class Unse {
static Random ran = new Random();
static final String[] arr = { "오늘은 모든 일이 잘 풀릴것 같음.",
"비가 올 것 같이 기분이 좋지 않음.", "안드로이드 공부 중.", "xml 중요.",
"프로젝트 준비 철저.", "마무리를 잘하자!!" };
static String getUnse() {
return arr[ran.nextInt(arr.length)];
}
}
class HowServer implements Runnable {
String data;
byte[] brr;
public void run() {
try {
ds = new DatagramSocket();
address = InetAddress.getByName("127.0.0.1");// 서버 주소
} catch (Exception e) {
e.printStackTrace();
}
try {
while (onAir) {
data = Unse.getUnse(); // 운세의 내용을 가져온다.
brr = data.getBytes(); // String을 byte 배열로 만들기.
packet = new DatagramPacket(brr, brr.length, address, port); // 배열, 배열길이, 주소, 포트번호.
ds.send(packet);
System.out.println("서버전송 문자열 :" + data);
Thread.sleep(1000);
}
} catch (Exception e) {
System.out.println("서버생성 오류 :" + e);
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new BroadServer();
}
}
- 전송하는 부분의 DatagramPacket 부부입니다.packet = new DatagramPacket(brr, brr.length, address, port)
- ds.send(packet) 부분이 Client로 데이타를 보내는 부분입니다.
관련글
댓글 없음:
댓글 쓰기