프로그래밍/Java, Android
(Java) UDP 통신
길가다주운노트
2016. 7. 10. 18:54
DatagramSocket : 데이터를 보내려는 곳이나 받기위해 포트를 여는데 사용하는 클래스
- receive(DatagramPacket) : 데이터가 수신 될 때까지 대기했다가 데이터를 보낸 IP, Port, 데이터 등을 DatagramPacket에 반환한다.
- send(DatagramPacket) : DatagramPacket에 저장된 IP, Port, 데이터를 보내는 메소드
DatagramPacket : 데이터를 수신이나 송신을 할 때 사용하는 클래스
- InetAddress getAddress() : IP주소를 반환
- int getPort() : Port를 반환
서버 구현 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class Main { public static void main(String[] args) { // WebAccessThread wat = new WebAccessThread(); // wat.start(); String strData = "Hello"; DatagramSocket ds; try { ds = new DatagramSocket(8082); while (true) { System.out.println("포트 열기"); byte[] buffer = new byte[100]; DatagramPacket dp = new DatagramPacket(buffer, buffer.length); // 패킷 수신 System.out.println("접속 대기"); ds.receive(dp); InetAddress address = dp.getAddress(); int port = dp.getPort(); System.out.println("패킷 수신 완료 : [" + address + " : " + port + "]"); // DatagramPacket dpo = new // DatagramPacket(wat.strData.getBytes(), // wat.strData.getBytes().length, address, port); DatagramPacket dpo = new DatagramPacket(strData.getBytes(), strData.getBytes().length, address, port); ds.send(dpo); } } catch (IOException e) { e.printStackTrace(); } } } | cs |
클라이언트
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 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 Main { public static void main(String[] args) { String strData = "Hello"; while(true){ System.out.println("서버 열기"); InetAddress iAddress; try { DatagramSocket dSocket = new DatagramSocket(); iAddress = InetAddress.getByName("noring.iptime.org"); byte[] msg = new byte[100]; DatagramPacket outPacket = new DatagramPacket(msg, 1, iAddress, 9001); DatagramPacket inPacket = new DatagramPacket(msg, msg.length); dSocket.send(outPacket); dSocket.receive(inPacket); System.out.println("server에서 온 값 : " + new String(inPacket.getData())); Thread.sleep(10); dSocket.disconnect(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } | cs |