프로그래밍/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