ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java - UDP
    Java 2018. 2. 6. 14:53
    반응형
    // UDP는 비연결 지향 프로토콜
    // 파일 전송 같은 경우 깨져서 들어옴
    // 이어 오기 X, 속도가 중요하다



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

    public class Sender {

        public static void main(String[] args) {
            
            // UDP를 사용하려면 DataGram 객체를 사용
            
                    // 1. DataGramSocket 생성
                    // 2. 보낼 내용 준비
                    // 3. 보낼 내용을 DataGramPacket에 담는다.
                    // 4. 패킷을 전송
                    // 5. 자원 정리(close)
                    
            try (DatagramSocket socket = new DatagramSocket();){ // 1
                System.out.println("발신 시작");
                for(int i=1;i<=3;i++) {
                    String msg = "Data : "+i; // 2
                    System.out.println(msg);
                    byte[] arr = msg.getBytes(); // 3
                    DatagramPacket packet = new DatagramPacket(arr, arr.length,
                            new InetSocketAddress("localhost", 9000));
                    socket.send(packet); // 4
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 5는 try-with-resource로 try구문 안에 있는건 try가 끝나면 자동 정리(java7)
        }
    }






    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;

    public class Receiver {

        public static void main(String[] args) throws SocketException, InterruptedException {
        
            // 1. DataGramSocket 생성
            // 2. 받을 패킷 생성
            // 3. 데이터 수신
            // 4. 수신 받은 데이터 출력
            // 5. 자원 정리
            
            DatagramSocket socket = new DatagramSocket(9000); // 소켓 생성
            DatagramPacket packet = new DatagramPacket(new byte[100], 100); // 패킷 생성
            
            Thread th = new Thread() {
                @Override
                public void run() {
                    while(true) {
                        try {
                            socket.receive(packet); // 패킷 수신
                            System.out.println("데이터 수신 완료");
                            byte[] ch = packet.getData(); // 패킷에서 바이트 배열 추출
                            String data = new String(ch); // 바이트 배열로 문자열 생성
                            System.out.println(data); // 문자열 출력
                        } catch (IOException e) {
                            e.printStackTrace();
                            break;
                        }
                    }
                }
            };
            th.setDaemon(true); // 데몬스레드로 바꾸면서 메인쓰레드랑 동시에 종료
            th.start();
            Thread.sleep(7000); // 7초후에 메인(,데몬) 쓰레드 둘다 종료
            socket.close();
        }
    }





    반응형

    'Java' 카테고리의 다른 글

    Java - Webserver Http  (0) 2018.02.07
    Java - Network - File I/O  (0) 2018.02.07
    Java - Network, MultiChat  (0) 2018.02.06
    Java - Network - Chat  (0) 2018.02.06
    Java - Network  (0) 2018.02.05

    댓글

Designed by Tistory.