비버놀로지

[JAVA] TCP와 UDP 본문

LANGUAGE STUDY/JAVA

[JAVA] TCP와 UDP

KUNDUZ 2020. 8. 23. 15:16
728x90
  • 소켓 프로그래밍

- 네트워크 프로그램도 결국 앞서 학습했던 I/O의 한 종류이다. 입력과 출력의 양 끝단을 노드라고 하는데 네트워크 프로그래밍에서의 노드를 소켓이라고 부른다. 이 소켓에서 각각 InputStream과 OutputStream을 생성해서 통신하게 된다.

- java에서는 java.net 패키지를 통해서 TCP(Transmission Control Protocol)와 UTP(User Datagram Protocol)방식의 네트워크 프로그래밍을 지원한다.

 

  • TCP(Transmission Control Protocol)

- TCP는 전화와 마찬가지로 두 노드가 1:1로 연결 후 신뢰성 있는 통신을 한다. 여기서 신뢰성 있다는 말은 데이터의 전송 순서가 보장되며 데이터의 수신 여부가 확인되는 것이다. 이런 절차상 문제로 UDP보다는 속도가 느려진다. Java에서 TCP 통신을 위해 ServerSocket과 Socket이 사용된다.

- Server

try(
ServerSocket ss = new SeverSocket(8080); // 8080번에 소켓 생성
){
	while(true) {
    try(
    Socket socket = ss.accept(); // 8080번에 누군가 접속하면 socket에 접속한다.
    ) {
    //Writer를 이용해서 char를 쓰고 Byte 단위로 변경한후 socket에 UTF-8 형식으로 작성한다.
    BufferdWriter bw = new BufferdWriter(new OutputStreamWriter(socket.getOutputStream(socket.getOutputStream(), "UTF-8"));
    
    ...
    
    } catch(IOException e){
    	e.printStackTrace();
    }
  }
} catch( Exception e){
	e.printStackTrace();
}




- Client

String host = "localhost";
		int port = 5100;
		//서버에 접속하기
		try ( Socket client = new Socket(host, port) ) {
			
			InputStream input = client.getInputStream();//연결된 서버를 읽겠다는 의미
            
//			FileInputStream fis=new FileInputStream("a.txt"); //파일을 읽겠다는 의미
			BufferedReader reader = new BufferedReader(new InputStreamReader(input));
            
            String message = reader.readLine();
            System.out.println(message);
            OutputStream out=client.getOutputStream();
            PrintWriter writer=new PrintWriter(out);
            out.write("echo".getBytes());
            writer.println("echo");
			
		 } catch ( IOException e) {
			 System.out.println("NetworkSimpleClient exception: " + e.getMessage());
			 e.printStackTrace();
		 }
  • UDP(User Datagram Protocol)

- UDP는 TV 방송처럼 노드간 연결은 없고 서버는 언제나 데이터를 보내며 관심있는 클라이언트만 데이터를 수신하는 구조로 TCP와 달리 1:1은 물론 1:n, n:n 등 다양한 접속 형태가 가능하며 통신 속도가 빠르다. 하지만 신뢰성 없는 데이터 전송이 이뤄지므로 데이터 전송 순서가 바뀐다거나 수신 여부의 확인이 어렵다.

- DatagramSocket, DatagramPacket이 사용된다.

 

 

 

728x90

'LANGUAGE STUDY > JAVA' 카테고리의 다른 글

[JAVA] String 클래스  (0) 2020.08.23
[JAVA] Object 클래스  (0) 2020.08.23
[JAVA] 표준입출력과 File  (0) 2020.08.22
[JAVA] 예외처리구문 - try~catch~finally  (0) 2020.08.22
[JAVA] 예외처리(Exception handling)  (0) 2020.08.22
Comments