Networking (네트 워킹)
Networking 이란 두대이상의 컴퓨터를 케이블로 연결하여
Network 를 구성하는 것을 말한다.
네트워킹의 개념은 컴퓨터들을 서로 연결하여 데이터를 손쉽게
주고 받거나 또는 자원(프린터와 같은 주변기기)을 함께 공유하고자
하는 노력에서 시작되었습니다.
지금은 전세계의 수많은 컴퓨터가 인터넷이라는 하나의 거대한 네트워크를 구성하고 있으며
인터넷을 통해 다양하고 방대한 데이터를 공유하는것이 가능해 졌습니다.
자바에서 제공하는 java.net 패키지를 사용하면 이러한 네트워크 애플리케이션을
쉽게 작성할수 있으며 , 간단한 네트워크 어플리케이션은 단 몇줄의 자바 코드로
작성이 가능합니다.
Client / Server (클라이언트 / 서버 )
: 클라이언트 서버는 컴퓨터 간의 관계를 역활로 구분하는 개념입니다.
Server 는 서비스를 제공하는 컴퓨터 이고
Client 는 서비스를 사용하는 컴퓨터 입니다.
일반적으로 server 는 다수의 클라이언트에게 서비스를 제공하기 때문에
고사양 컴퓨터를 갖춘 컴퓨터이고 하드웨어의 사양으로 서버와 클라이언트를 구분하는것이 아니기 때문에
하드웨어 사양에 관계없이 서비스를 제공하는
소프트웨어가 실행되는 컴퓨터를 서버라고 합니다.
TCP / IP 프로토콜
: 인터넷은 TCP / IP 프로토콜 을 사용하고 있습니다.
프로토콜은 다양한 네트워크 장치들이 서로 데이터를 교환할수 있도록
해주는 일종의 약속입니다.
프로토콜 : 원격지에 있는 Host 상호간에 정확하고 효율적으로
데이터를 전송하는데 필요한 모든 약속
호스트 : 네트워크에 연결된 컴퓨터를 의미
TCP/IP 계층구조
1977년 국제 표준화 기구 ISO 는 서로다른 서비스간의 원활한 통신을 위해 OSI 7 계층이라는
프로토콜 표준을 제정하였습니다. 이 프로토콜은 통신을 위한 표준적인 방법을 제시하고 ,
기존 표준과의 관계 및 향후 개발되는 표준과의 관계를 명확히 하기위해 개발되었습니다.
OSI 7 계층
응용 계층(Application Layer)
표현 계층(Presentation Layer)
세션 계층(Session Layer)
전송 계층(Transport Layer)
네트워크 계층(Network Layer)
데이터 링트 계층(Data Link Layer)
물리 계층 (Physical Layer)
TCP/IP 프로토콜의 종류
전화 통화를 하기 위해서는 상대방의 전화번호를 알고 있어야 합니다.
또한 상대방의 전화번호가 중복되지 않고 유일한 번호일 경우에만 정상적인
통화를 할수 있습니다. 마찬가지로 컴퓨터 통신에서도 상대방의 정확한 주소를 알고있어야합니다.
IP 주소는 이러한 고유번호를 전세계 컴퓨터에 부여한 것입니다.
IP가 부여된 컴퓨터와 통신을 하기 위해서는 반드시 상대방의 IP 주소를 알고 있어야 합니다.
예를 들어 썬 시스템사를 방문하고 싶다면 이 회사의 IP 주소(192.18.97.7)를 알고있어야 합니다.
하지만 숫자를 외우는 것은 너무 어렵기 때문에 Java.sun.com 이라는 도메인 네임을 통해 쉽게 접근할수
있습니다.
TCP/IP 전송 계층은 연결형인 TCP 와 비연결형인 UDP 로 구성되어 있습니다.
TCP 와 UDP 모두 Packet(데이터 전송단위)단위로 전송됩니다.
TCP 방식 UDP 방식
연결방식 연결 지향적 비연결 지향적
신뢰성 O X
네트워크 부하 많음 적음
사용예 FTP,TELNET SMTP, 대용량 미디어 화일에 적용
POP3 , HTTP
자바는 네트워크 프로그램을 작성하는데 필요한 java.net 패키지를 제공합니다.
java.net 패키지는 다음과 같은 클래스로 구성되어있습니다.
클래스 종류 기능
InetAddress IP 주소를 처리하는기능
URLConnection URL 을 처리하는 기능
ServerSocket TCP 를 처리하는 기능
Socket
DatagramPacket UDP 를 처리하는 기능
DatagramSoket
IP(Internet Protpcol)
상호 연결된 네트워크를 통해 데이터를 저농하는데 필요한 기능을 제공합니다.
IP프로토콜은 네트워크 계층에 속하고 , 호스트의 주소지정과 패킷생성 기능을
제공합니다. 즉 수신지로 데이터를 전달하는 작업만 처리합니다.
데이터를 전송하기 위해 IP 주소를 사용합니다.
V4
32 비트를 8비트씩 4부분으로 나누고 각 부분을 . 으로 구분해 각각을 10진수로
나타냅니다.
210.94.123.35
IP주소는 네트워크 부분과 호스트 부분으로 구성됩니다.
네트워크 부분은 호스트가 포함되어 있는 네트워크 식별자로 사용되고
호스트 부분은 특정 호스트를 식별하는 데 사용 됩니다.
UDP 채팅 서버 프로그램
public class UDPChatServer {
public static void main(String[] args) {
int port = 5005; //채팅 서버 포트
final int BUFFER = 50;
byte buffer[] = new byte[BUFFER];
String message = null;
PrintStream ps = new PrintStream(System.out);
try {
DatagramSocket ds = new DatagramSocket(port);
DatagramPacket dp = new DatagramPacket(buffer,buffer.length);
while(true) {
ds.receive(dp);
message = new String(dp.getData());
ps.print("수신 메시지 >> " +message);
}
}catch (Exception e) {
System.out.println(e.getMessage());
}
ps.close();
}
}
UDP 방식 데이터 교환을 위해서는 다음 두가지 클래스가 있다.
DatagramPacket : 데이터 패킷은 데이터를 하나로 묶는 객체라고 보면 편하다.
DatagramSoket : 데이터 소켓은 우리집의 대문을 생각하면 된다.
다른사람이 내 IP로 접근할때 , 내 데이터를 밖으로 내보낼때
DatagramSocket 을 통해 접근한다.
DatagramPacket 은 대표적으로 2가지 용도가 있다.
1. 누군가가 보낸 데이터를 받을 패킷. new DatagramPacket(byte[] buf,int length)
전송된 byte 데이터를 저장할 버퍼 , 읽어낼 길이.
보통 buf 의 길이만큼 사용한다.
2. 데이터를 보낼 패킷 . DatagramPacket(byte[] buf,int length , InetAddress address,int port)
특이하게도 보내는 패킷에는 전송할 목적지의 주소와 포트번호를 같이 가지고 간다.
buf = 바이트 타입 전송할 데이터 , length = 보낼 패킷의 길이 , address = 전송할 주소
port 접속할 주소가 열어둔 포트번호
public class UDPChatClient {
public static void main(String[] args) {
int port = 5005;
String server_ip, str;
try {
PrintStream ps = new PrintStream(System.out);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ps.print(" 접속할 서버 아이피 : >>");
server_ip = br.readLine();
ps.print(" 전송할 메시지 : >>");
str = br.readLine();
DatagramSocket ds = new DatagramSocket();
InetAddress addr = InetAddress.getByName(server_ip);
byte buffer[] = str.getBytes();
DatagramPacket dp = new DatagramPacket(buffer, buffer.length, addr, port);
ds.send(dp);
ps.print(server_ip + "에 메시지 전송 성공! ");
ps.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
UDP 방식은 데이터의 전송이 끝나면 연결을 끊는다.
UDP 방식은 TCP 방식에 비해 서버의 부담을 줄이는 효과가 있지만.
상대방이 내가 보낸 데이터를 정상적으로 받앗는지 체크 할수가 없다.
또한 보낸 데이터 소실확률이 있다.
DatagramSocket 은 기본생성자로 특정 포트를 정하지 않고 만들수도 있고(클라이언트)
서버로서 특정 포트를 열어 둘수도 있다.
new DatagramSocket(), new DatagramSocket(int port)
2가지 메서드를 가지고 잇다.
send( DatagramPacket pack) // 데이터 그램 전송. 받을 위치는 데이터 그램에 이미들어있다.
receive (DatagramPacket pack)// 데이터 그램 수신. 여기 들어간 데이터그램의 버퍼에 받는다.
추가로 리시브된 DatagramPacket 에는 발신자의 포트번호 , InetAddress등이 있어서
보낸사람에게 다시 데이터를 전송 할 수도잇다.
또한 리시브가 수행되면 데이터가 올떄까지 프로세스를 정지하고 대기한다.
'국비 과정 > Java' 카테고리의 다른 글
| 국비 - 0819 ( 채팅 창 만들기 ) (1) | 2022.08.19 |
|---|---|
| 국비 - 0804 ( Event ) (0) | 2022.08.08 |
| 국비 - 0803 ( Text , ScrollPane , Layout) (0) | 2022.08.03 |
| 국비 - 0802 ( Checkbox , Scrollbar ) (0) | 2022.08.02 |
| 국비 - 0801 ( Frame , Button , Label ) (0) | 2022.08.01 |