TIL#22-1

DuBu·2023년 7월 7일
0

일본IT JAVA 연수과정

목록 보기
37/61

프로토콜 만들어지는 과정

  • RFC라는 미국의 인터넷 표준화 기구가 있음
  • 개발자들은 해당 RFC 문서를 보고 구현
  • HTTP RFC 문서도 존재, RFC2616

패킷 교환 방식 / 서킷 교환 방식

OSI 7 Layers

OSI 7 계층은 전산 네트워크에서 통신 프로토콜들의 상호작용을 정의한 7단계의 모델입니다. OSI는 Open Systems Interconnection의 약자이며, 1984년 국제표준화기구(ISO)에서 발표했습니다. OSI 7 계층은 물리 계층, 데이터 링크 계층, 네트워크 계층, 전송 계층, 세션 계층, 표현 계층, 응용 계층으로 구성됩니다.
1. 물리 계층은 데이터를 전송하는 데 필요한 물리적 장치와 프로토콜을 정의합니다. 물리 계층은 네트워크에서 가장 낮은 계층이며, 전기 신호, 광학 신호, 전자기파와 같은 물리적 매체를 사용하여 데이터를 전송합니다.
2. 데이터 링크 계층은 데이터를 패킷으로 나누고 전송하는 데 필요한 프로토콜을 정의합니다. 데이터 링크 계층은 데이터 링크 장치와 같은 물리적 장치를 관리하며, 데이터를 신뢰성 있게 전송하는 데 필요한 기능을 제공합니다.
3. 네트워크 계층은 데이터를 컴퓨터 네트워크로 전송하는 데 필요한 프로토콜을 정의합니다. 네트워크 계층은 데이터를 네트워크 주소로 라우팅하고, 데이터를 신뢰성 있게 전송하는 데 필요한 기능을 제공합니다.
4. 전송 계층은 데이터를 신뢰성 있게 전송하는 데 필요한 프로토콜을 정의합니다. 전송 계층은 데이터를 패킷으로 나누고, 패킷의 순서를 유지하며, 패킷의 오류를 수정하는 데 필요한 기능을 제공합니다.
5. 세션 계층은 컴퓨터 간의 세션을 관리하는 데 필요한 프로토콜을 정의합니다. 세션 계층은 컴퓨터 간에 연결을 설정하고, 연결을 종료하며, 데이터를 전송하는 데 필요한 기능을 제공합니다.
6. 표현 계층은 데이터를 사용자에게 이해하기 쉬운 형식으로 변환하는 데 필요한 프로토콜을 정의합니다. 표현 계층은 데이터를 압축, 암호화, 또는 변환하여 사용자에게 이해하기 쉬운 형식으로 제공합니다.
7. 응용 계층은 사용자와 응용 프로그램이 네트워크를 통해 데이터를 교환하는 데 필요한 프로토콜을 정의합니다. 응용 계층은 전자 메일, 파일 전송, 웹 브라우징과 같은 사용자와 응용 프로그램이 네트워크를 통해 데이터를 교환하는 데 필요한 기능을 제공합니다.

Socket을 이용하여 간단한 채팅 구현

ChatTCPServer.java

package edu.global.chat;

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

import edu.global.chat.way.Receiver;
import edu.global.chat.way.Sender;

public class ChatTcpServer {

	public static void main(String[] args) {
		ServerSocket serverSocket = null;
		
		Socket socket = null;
		
		try {
			//Port number
			serverSocket = new ServerSocket(7777);
			System.out.println("Server is ready.");
			
			socket = serverSocket.accept();
//			System.out.println("Connected." + socket.getInetAddress().getHostName());
			
			Sender sender = new Sender(socket);
			Receiver receiver = new Receiver(socket);
			
			sender.start();
			receiver.start();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
	}
}

ChatTCPClient.java

package edu.global.chat;

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

import edu.global.chat.way.Receiver;
import edu.global.chat.way.Sender;

public class ChatTcpClient {

	public static void main(String[] args) {
		String serverIP = "127.0.0.1";

		Socket socket = null;

		try {

			socket = new Socket(serverIP, 7777);

			System.out.println("Connected at server.");

			Sender sender = new Sender(socket);
			Receiver receiver = new Receiver(socket);

			sender.start();
			receiver.start();

		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}

Sender.java

package edu.global.chat.way;

import java.io.DataOutputStream;
import java.net.Socket;
import java.util.Scanner;

public class Sender extends Thread {
	private Socket socket;
	private DataOutputStream out;
	private String name;
	
	public Sender(Socket socket) {
		this.socket = socket;
		try {
			out = new DataOutputStream(socket.getOutputStream());
			name = "[" + socket.getInetAddress() + ":" + socket.getPort() +"]";
		} catch (Exception e) {
			e.getMessage();
		}
	}
	
	public void run() {
		Scanner scanner = new Scanner(System.in);
		
		while(out != null) {
			try {
				out.writeUTF(name + scanner.nextLine());
			} catch (Exception e) {
				e.getMessage();
			}
		}
	}
	
}

Receiver.java

package edu.global.chat.way;

import java.io.DataInputStream;
import java.net.Socket;

public class Receiver extends Thread {
	private Socket socket;
	private DataInputStream in;

	public Receiver(Socket socket) {
		this.socket = socket;
		try {
			in = new DataInputStream(socket.getInputStream());
		} catch (Exception e) {
			e.getMessage();
		}
	}

	public void run() {
		while (in != null) {
			try {
				System.out.println(in.readUTF());
			} catch (Exception e) {
				e.getMessage();
			}
		}
	}

}

0개의 댓글