ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java - Network
    Java 2018. 2. 5. 12:31
    반응형
    // Network


    import java.net.InetAddress;
    import java.net.UnknownHostException;

    public class GetIP {

        public static void main(String[] args) throws UnknownHostException {
            
            // Get LocalHost IP
            InetAddress addr = InetAddress.getLocalHost();
            System.out.println(addr.getHostAddress());
            
            // Get Domain IP
            String domain = "www.sangmoo.xyz";
            addr = InetAddress.getByName(domain);
            System.out.println(addr.getHostAddress());
            
            // 특정 도메인에 여러 IP가 있을 경우
            domain = "www.youtube.com";
            InetAddress[] addrs = InetAddress.getAllByName(domain); // 여러 IP이기 때문에 []형식
            System.out.println(domain+" 에 연결된 IP들");
            for(InetAddress ip : addrs) {
                System.out.println(ip.getHostAddress());
            }

        }

    }




    // TCP는 연결 지향형이다. -> 소켓통신
    // 신호가 끊기면 이어서 간다.
    // 반면에 UDP는 중간에 끊기면 데이터를 버린다.


    import java.io.IOException;
    import java.net.InetSocketAddress;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class Server {

        public static void main(String[] args) throws IOException {
            
            ServerSocket server =null;
            try {
                // 1. 소켓생성
                server = new ServerSocket();
                // 2. IP 개방
                server.bind(new InetSocketAddress("localhost", 9000));
                // 3. 클라이언트 요청 대기
                while(true) {
                    System.out.println("요청 대기 중");
                    // 4. 요청에 따른 실행 및 응답
                    Socket socket = server.accept();
                    /*해야 할 일 수행 - Client의 주소 확인*/
                    InetSocketAddress addr
                     = (InetSocketAddress) socket.getRemoteSocketAddress();
                    System.out.println("Client 주소 확인 : "+addr.getAddress()+" : "+addr.getPort());
                }
            }
            catch (IOException e) {
                e.printStackTrace();
                // 5. 소켓 반납
                server.close();
                System.out.println("Server Close");
            }

        }

    }







    import java.io.IOException;
    import java.net.InetSocketAddress;
    import java.net.Socket;

    public class Client {

        public static void main(String[] args) throws IOException {
            
            // 1. 소켓 생성
            Socket socket = new Socket();
            // 2. 접속 요청
            try {
                socket.connect(new InetSocketAddress("localhost", 9000));
                // 3. 요청이 받아지면 작업 수행
                System.out.println("접속 완료");
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 4. 소켓 반납
            socket.close();
        }

    }



    * 에코 서버를 통해서 메세지를 보내고 받는 기능이 가능한지 판단 가능


    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.net.InetSocketAddress;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class Server {

        public static void main(String[] args) throws IOException {
            
            ServerSocket server = null;
            
            try {
                // 1. 소켓 생성
                server = new ServerSocket();
                // 2. IP 개방
                server.bind(new InetSocketAddress("localhost",9000));
                // 3. 요청 대기
                while(true) {
                    System.out.println("요청 대기 중");
                    // 4. 접속 요청 수락
                    Socket socket = server.accept();
                    System.out.println("접속 수락");
                    // 5. is와 os준비
                    InputStream is = socket.getInputStream();
                    OutputStream os = socket.getOutputStream();
                    InputStreamReader reader = new InputStreamReader(is);
                    OutputStreamWriter writer = new OutputStreamWriter(os, "utf-8");
                    // 6. is와 os로 데이터 주고 받기
    //              int data; // EOF가 없기 때문에 무한 루프가 된다.
    //              while((data = reader.read()) != -1) {
    //                  System.out.print(data);
    //                  writer.write(data);
    //              }
                    
                    // 방법 1 - 큰 배열 하나로 받아내는 방법
                    char[] arr= new char[20];
                    reader.read(arr); // while문이 없으므로 단 한번만 받아온다.
                    String msg = new String(arr);
                    System.out.println("받은 메세지 : "+msg);
                    writer.write(msg);
                    
    //              // 방법 2 - EOF 대신 특정 문자로 대체 하는 방법
    //              char data;
    //              while(true) {
    //                  data = (char) reader.read();
    //                  System.out.print(data);
    //                  writer.write(data);
    //                  if(data == '~') {
    //                      break;
    //                  }
    //              }
                    
    //              char[] b = new char[1024];
    //              while(reader.read(b) != -1) {
    //                  System.out.print("Client : "+b);
    //                  writer.write(b);
    //              }
                    
                    writer.flush();
                    System.out.println("전송 완료");
                    // 7. 자원 반납
                    is.close();
                    os.close();
                    reader.close();
                    writer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
                // 7. 자원 반납
                server.close();
            }
        }

    }






    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.net.InetSocketAddress;
    import java.net.Socket;

    public class Client {

        public static void main(String[] args) throws IOException {
            
            // 1. 소켓 생성
            Socket socket = new Socket();
            
            // 2. 접속 요청
            try {
                socket.connect(new InetSocketAddress("localhost", 9000));
                System.out.println("연결 완료");
                
                OutputStream os = socket.getOutputStream();
                OutputStreamWriter writer = new OutputStreamWriter(os, "utf-8");
                
                // 4. 데이터 전송
                String msg = "Hello, Server";
                writer.write(msg);
                writer.flush();
                System.out.println("전송 완료");
                
                // 5. 데이터 수신
                InputStream is = socket.getInputStream();
                InputStreamReader reader = new InputStreamReader(is);
                
                char[] arr = new char[20];
                reader.read(arr);
                String reply = new String(arr);
                System.out.println("받은 메세지 : " + msg);
                writer.write(reply);
                
                // 6. 자원 반납
                is.close();
                os.close();
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                socket.close();
            }
        }

    }





    반응형

    'Java' 카테고리의 다른 글

    Java - Network, MultiChat  (0) 2018.02.06
    Java - Network - Chat  (0) 2018.02.06
    Java - Stream IO  (0) 2018.02.02
    Java - File I/O  (0) 2018.02.01
    Java - Java I/O  (0) 2018.02.01

    댓글

Designed by Tistory.