- 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로 데이타를 보내는 부분입니다.
관련글
댓글 없음:
댓글 쓰기