[Day 13] 국비 0413 - 내용 정리

19077 단어 국비JavaJava

🌞java.net

  • 네트워크 프로그래밍과 관련한 클래스들을 모아놓은 패키지

🌈InetAddress

  • 인터넷 상의 주소를 표현하기 위한 클래스
  • InetAddress는 생성자가 제공되지 않으면 static 메소드를 통하여 객체를 생성할 수 있다.

🌈URL

  • 인터넷 상의 문서의 위치를 표현하기 위한 클래스

🌞통신 프로그램

  • 네트워크 상에 있는 두 대의 컴퓨터가 서로 데이터를 주고받는 프로그램

🌈통신과 관련된 기본 용어

  • ip주소 : 인터넷상의 수 많은 컴퓨터들 중에 특정 컴퓨터를 구별하기 위한 식별자
  • port 번호: 하나의 컴퓨터에서 동시에 여러 개의 네트워크 프로그램이 실행할 수 있다. 이 때에 특정 프로그램을 구별하기 위한 식별자
  • 서버: 서비스를 제공하는 컴퓨터 혹은 프로그램
  • 클라이언트: 서비스를 제공받는 컴퓨터 혹은 프로그램
  • 메아리: 수신한 데이터를 그대로 데이터를 보낸 쪽으롤 내보내는 것
  • 방송: 수신한 데이터를 연결된 모든 컴퓨터에게 내보내는 것

🌈통신하는 방식

🍁TCP 방식

  • 통신하고자 하는 컴퓨터와 연결을 먼저 맺은 후에 상대방 컴퓨터가 데이터를 받을 준비가 되어있는지 확인한 후, 데이터를 주고 받는 방식
  • 현실에서의 "전화"와 비슷한 개념

🍁UDP 방식

  • 통신하고자 하는 컴퓨터와 연결을 맺지 않고 상대방 컴퓨터가 데이터를 받을 준비가 되어있는지 확인 없이 데이터를 전달하는 방식
  • 현실에서의 "편지"와 비슷한 개념

🌈통신방식에 따른 자바가 제공하는 클래스

🍁TCP 방식

  • ServerSocket
  • Socket

🍁UDP 방식

  • DatagramSocket
  • DatagramPacket

🌈TCP 방식의 네트워크 프로그래밍 절차

					서버 				     	   클라이언트
               
1.         ServerSocket 생성
2. 	클라이언트가 접속할 때 까지 무한 대기상태
3. 										  Socket객체를 생성하여 통신을 요청
4. 		       통신을 수락
5. 		데이터를 주고받을 스트림을 생성		  데이터를 주고받을 스트림을 생성
6.			데이터를 주고받는다. 				  데이터를 주고받는다.
7. 		사용했던 자원을 닫아준다.			   	사용했던 자원을 닫아준다.

🌈UDP

🍁UDPSender

192.168.0.2 / 9001 안녕? //sender가 보내주면

🍁UDPReceiver

안녕? //receiver가 받아서 출력


🌞예제

🌟(InetAddress)예제1🌟

import java.net.InetAddress;

public class InetAddressTest {

	public static void main(String[] args) {
		try {
			
			InetAddress addr = InetAddress.getByName("www.naver.com"); //네이버 닷컴의 ipadress 정보를 확인할 수 있다.
			System.out.println(addr);
			
		} catch (Exception e) {
			
			System.out.println("예외발생: " + e.getMessage());
		}
	}

}

🌟(TCPClient)예제2🌟

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {

	public static void main(String[] args) {
		try {
			// 3. 서버에게 통신을 요청한다.
			Socket socket = new Socket("192.168.0.2", 9000); // ip주소와 포트번호 9000번 (server에서 설정해줌) //cmd에서 확인한 아이피주소를
																// 적어준다.

			// 5. 데이터를 주고받을 스트림을 생성
			InputStream is = socket.getInputStream();
			OutputStream os = socket.getOutputStream();
			
			// 6. 데이터를 주고받는다.
			for(int i=1; i<=10; i++) {
				int n = is.read(); //수신된 데이터를 읽어옴.
				System.out.println("서버로 부터 수신된 데이터: " +n);
				
				Thread.sleep(200);
				
			}
			
			// 7. 사용했던 자원을 닫아준다.
			is.close();
			os.close();
			socket.close();	

		} catch (Exception e) {
			System.out.println("예외발생: " + e.getMessage());
		}

	}

}

🌟(TCPServer)예제3🌟

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class TCPServer {

	public static void main(String[] args) {
		
		Random r = new Random(); //랜덤 생성
		

		try {
			// 1. ServerSocket을 생성한다.
			ServerSocket server = new ServerSocket(9000);

			// 2. 클라이언트의 접속이 있을 때 까지 무한 대기상태
			while (true) {
				// 4. 클라이언트의 접속을 수락한다. (반환하는 메소드 Socket)
				Socket socket = server.accept(); // 소켓 객체를 반환한다.
				System.out.println("** 클라이언트가 연결하였습니다. **");

				// 5. 데이터를 주고받을 스트림을 생성
				InputStream is = socket.getInputStream();
				OutputStream os = socket.getOutputStream();
				
				// 6. 데이터를 주고받는다.
				// 연결한 클라이언트한테 정수 난수 10개를 만들어 보내주도록 하자.
				for(int i=1; i<=10; i++) {
					
					
					//0에서 100사이의 난수를 만들자.
					int n = r.nextInt(100);
					
					System.out.println("서버에서 난수를 만들었습니다. " + n);
					
					
					//만들어진 난수를 클라이언트한테 보낸다.
					os.write(n); //정수를 내보냄
					
					Thread.sleep(200); //0.2초 정도의 대기시간
					
				}
				
				System.out.println("클라이언트에게 데이터를 모두 내보냈습니다.");
				
				// 7. 사용했던 자원을 닫아준다.
				is.close();
				os.close();
				socket.close();
			}

		} catch (Exception e) {
			System.out.println("예외발생: " + e.getMessage());
		}

	}

}

좋은 웹페이지 즐겨찾기