JAVA | 네트워크 기초

    JAVA / / 2020. 12. 2. 12:44

    네트워크

    -여러 컴퓨터를 통신 회선으로 연결한 것

     

    서버와 클라이언트

    서버 : 서비스를 제공하는 프로그램

    웹서버, FTP서버, DBMS, 메신저 서버

    클라이언트의 연결을 수락하고, 요청 내용을 처리한 후 응답을 보내는 역할

     

    클라이언트 : 서비스를 받는 프로그램

    웹브라우저, FTP 클라이언트, 메신저

    네트워크 데이터를 필요로 하는 모든 애플리케이션이 해당(모바일 앱 조합)

     

    nlp.jbnu.ac.kr/PL2020/ch14_additional.pdf

    참고


    package kr.co.kihd.inetaddress;
    
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    
    public class InetAddressTest {
    
    	public static void main(String[] args) throws Exception {
    		InetAddress ia = null;
    		InetAddress[] iaArr = null;
    		
    		ia = InetAddress.getByName("www.google.com");
    		System.out.println("호스트 네임 : " + ia.getHostName());
    		System.out.println("호스트의 IP주소 : " + ia.getHostAddress());
    		System.out.println(ia.toString());
    		System.out.println("-----------------------------------------");
    		
    		iaArr = InetAddress.getAllByName("www.google.com");
    		
    		for(int i = 0; i<iaArr.length; i++) {
    			System.out.println(iaArr[i]);
    		}
    		System.out.println("-----------------------------------------");
    		
    		ia = InetAddress.getLocalHost();
    		System.out.println("로컬호스트 : " + ia.getHostName());
    		System.out.println("로컬호스트 주소 : " + ia.getHostAddress());
    	}
    
    }
    
    호스트 네임 : www.google.com
    호스트의 IP주소 : 216.58.220.132
    www.google.com/216.58.220.132
    -----------------------------------------
    www.google.com/216.58.220.132
    -----------------------------------------
    로컬호스트 : DESKTOP-E6G5Q1J
    로컬호스트 주소 : 192.168.100.145

    package kr.co.kihd.inetaddress;
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    
    /*
     * URL : Uniform Resource Location
     *		 인터넷에 존재하는 서버들의 자원에 접근할수 있는 주소
     *		 ex)https://developer.android.com/about?hl=ko
     *		 1)프로토콜 : 자원에 접근하기 위해 서버와 클라이언트간 통신하는데 사용하는 규약.
     *		 2)호스트명 : 자원을 제공하는 서버의 이름
     *		 3)포트번호 : 통신에 사용되는 서버의 포트번호(80)
     *		 4)경로명 : 접근하려는 자원이 저장되된 서버상의 위치
     * 	     5)쿼리(query) : URL에서 '?'이후의 부분
     */	  	 
    
    public class URLTest {
    
    	public static void main(String[] args) throws Exception {
    		URL url = new URL(args[0]);
    		
    		System.out.println("프로토콜 : " + url.getProtocol());
    		System.out.println("호스트 : " + url.getHost());
    		System.out.println("포트 : " + url.getPort());
    		System.out.println("파일 : " + url.getFile());
    		
    		InputStream ins = url.openStream();
    		
    		BufferedReader br = null;
    		
    		br = new BufferedReader(new InputStreamReader(ins));
    		
    		String str = " ";
    		while((str = br.readLine()) != null) {
    			System.out.println(str);
    		}
    		
    		br.close();
    		ins.close();
    		
    	}
    
    }
    

    스트림을 활용해서 이미지 불러와 저장하기 

    package kr.co.kihd.inetaddress;
    
    import java.io.BufferedInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.net.URL;
    import java.net.URLConnection;
    
    public class URLConectionTest {
    	//스트림을 활용해서 이미지 불러와 저장하기 
    	public static void main(String[] args) throws Exception {
    		
    		String str = "https://lh5.googleusercontent.com/p/AF1QipMGUsroCou49CjvAhNInHfC4EgkYIBM4WFWEWHi=w408-h544-k-no";
    		URL url = new URL(str);
    		URLConnection conn = url.openConnection();
    		System.out.println("toString() : " + conn);
    		int size = conn.getContentLength();
    		System.out.println("파일 크기 : " + size);
    		System.out.println("파일 타입 : " + conn.getContentType());
    		System.out.println();
    		
    		InputStream in = url.openStream(); //주스트림
    		BufferedInputStream bi = new BufferedInputStream(in); //주스트림 + 보조스트림 연결
    		
    		FileOutputStream fo = new FileOutputStream("gumi.jpg");
    		
    		byte[] buffer = new byte[1024];
    		int imgData = 0;
    		int cnt = 0;
    		
    		while( (imgData = bi.read(buffer)) != -1) {
    			fo.write(buffer, 0, imgData);
    			fo.flush();
    			cnt += imgData;
    			System.out.println(((cnt*100)/size) + "%");
    			
    		}
    		in.close(); bi.close(); fo.close();
    		
    	}
    
    }
    
    toString() : sun.net.www.protocol.https.DelegateHttpsURLConnection:https://lh5.googleusercontent.com/p/AF1QipMGUsroCou49CjvAhNInHfC4EgkYIBM4WFWEWHi=w408-h544-k-no
    파일 크기 : 97174
    파일 타입 : image/jpeg
    
    0%
    1%
    2%
    3%
    3%
    4%
    5%
    6%
    6%
    7%
    8%
    9%
    9%
    10%
    10%
    11%
    12%
    13%
    13%
    14%
    15%
    16%
    17%
    17%
    18%
    19%
    20%
    20%
    21%
    21%
    22%
    23%
    24%
    24%
    25%
    26%
    27%
    27%
    28%
    29%
    30%
    30%
    31%
    32%
    32%
    34%
    34%
    35%
    35%
    36%
    37%
    38%
    38%
    39%
    40%
    41%
    41%
    42%
    43%
    44%
    44%
    45%
    46%
    47%
    47%
    48%
    48%
    49%
    50%
    51%
    52%
    52%
    53%
    54%
    55%
    55%
    56%
    57%
    58%
    58%
    59%
    59%
    61%
    61%
    62%
    62%
    63%
    64%
    65%
    65%
    66%
    67%
    68%
    69%
    69%
    70%
    71%
    72%
    72%
    73%
    73%
    74%
    75%
    76%
    76%
    77%
    78%
    79%
    79%
    80%
    81%
    82%
    82%
    83%
    84%
    84%
    86%
    86%
    87%
    87%
    88%
    89%
    90%
    90%
    91%
    92%
    93%
    93%
    94%
    95%
    96%
    96%
    97%
    98%
    99%
    99%
    100%
    

    소켓 프로그래밍

    소캣

    TCP/IP 네트워크를 이용하여 쉽게 통신 프로그램을 작성하도록 지원하는 기반 기술

     

    서버를 먼저 구현하고 다음으로 클라이언트를 구현한다, 

    package kr.co.kihd.demo;
    
    import java.io.DataInputStream;
    import java.io.InputStream;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class DemoClient {
    
    	public static void main(String[] args) throws Exception {
    		
    		//연결시 소켓이 생성된다. 연결이 안될경우에는 예외발생한다.
    		Socket socket = new Socket("192.168.100.145", 5050); //127.0.0.1
    		System.out.println("서버와 접속이 되었습니다....");
    		
    		InputStream ins = socket.getInputStream(); //주스트림
    		DataInputStream dins = new DataInputStream(ins); //보조스트림 연결
    		
    		String str = dins.readUTF();
    		int number = dins.readInt();
    		System.out.println("서버에서 전송된 문자 : " + str);
    		System.out.println("서버에서 전송된 값 : " + number);
    		
    		dins.close(); ins.close(); socket.close();
    		
    		
    		
    	}
    
    }
    
    package kr.co.kihd.demo;
    
    
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class DemoServer {
    
    	   public static void main(String[] args) throws IOException {
    		      
    		      int port = 5050;
    		      int number = Integer.parseInt(args[0]); //실행할때 매개변수 첫번째 문자를 받음
    		      String str = new String(args[1]);
    		      
    		      //서버 소켓 생성
    		      ServerSocket serverSocket = new ServerSocket(port);
    		      System.out.println("접속 대기중~");
    		      
    		      while(true) {
    		         Socket socket = serverSocket.accept();
    		         System.out.println("사용자 접속 했습니다.");
    		         System.out.println("클라이언트 IP : "
    		               + socket.getInetAddress().getHostAddress());
    		         
    		         //스트림 생성
    		         OutputStream ous = socket.getOutputStream();
    		         DataOutputStream dous = new DataOutputStream(ous);
    		         
    		         dous.writeUTF(str);
    		         dous.writeInt(number);
    		         dous.flush();
    		         
    		         dous.close();
    		         ous.close();
    		         socket.close();
    		         
    		         
    		         }//while
    		   }
    
    }
    

    서버와 접속이 되었습니다.
    서버에서 전송된 문자 : 구미시
    서버에서 전송된 값 : 123

     


    서버에서 하이! 메시지 write 클라이언트 readLIne으로 출력하기

    package kr.co.kihd.echo;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class EchoServerTest {
    	
    	public static void main(String[] args) {
    		
    		int port = 7070;
    		ServerSocket serverSocket = null;
    		Socket socket = null;
    		
    		//서버소켓 생성
    		try {
    			serverSocket = new ServerSocket(port);
    			System.out.println("접속 대기중");
    			socket = serverSocket.accept();
    			System.out.println(socket.getLocalPort() + "포트와 클라이언트" 
    								+socket.getInetAddress() + "과 접속이 되었습니다.");
    			
    			OutputStream out = socket.getOutputStream();//클라이언트와 통신하기 위한 스트림을 생성
    			PrintWriter pout = new PrintWriter(out, true); //flush()기능 자동으로 제공
    			
    			pout.println("하이!!");
    			
    			out.close(); pout.close(); socket.close(); serverSocket.close(); //반드시 넣어줌
    			
    			
    			
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		
    		
    	
    	}
    }
    
    package kr.co.kihd.echo;
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.Socket;
    
    public class EchoClientTest {
    
    	public static void main(String[] args) throws Exception {
    		String ip = "192.168.100.145";
    		int port = 7070;
    		
    		//소켓 생성
    		Socket socket = new Socket(ip, port);
    		System.out.println("서버와 접속이 되었습니다.");
    		
    		//서버로부터 데이터를 입력받는 스트림
    		InputStream ins = socket.getInputStream(); //주스트림
    		InputStreamReader isr = new InputStreamReader(ins); //보조스트림
    		BufferedReader bff = new BufferedReader(isr); //버퍼 3개 연결
    		
    		String serverMsg = "";
    		serverMsg = bff.readLine(); //서버에서 읽음.
    		System.out.println("서버메시지 >" + serverMsg); //서버에서 불러온 메시지
    		
    		bff.close(); socket.close(); isr.close(); ins.close();
    	}
    
    }
    

    서버와 접속이 되었습니다.
    서버메시지 >하이!!

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading