본문 바로가기

자바

day23

네트워킹
웹 소켓 통신 
네트워크 : 
-실시간으로 서로 데이터를 주고 받을 수 있는 컴퓨터 및 다른 장치들의 집합
- 두 대 이상의 컴퓨터를 연결하고 서로 통신할 수  있는 것
-규모에 따른 네트워크 종류 : 
WAN : 광대역 네트워크 -> 인터넷
MAN : 대도시 영역 네트워크
LAN : 근거리 영역 네트워크 
PAN : 가장 작은 규모의 네트워크 

네트워크 용어 
1. 노드(Node) : 네트워크에 연결된 장치 

 

2. 주소(Address) :
 -노드를 유일하게 구별해주는 일련의 바이트 
           - 네트워크 종류에 따라 다르게 할당 

 

3. 도메인(Domain) : 
-노드를 기억하기 쉽도록 노드에 부여한 이름 
  - 문자로 만든 인터넷 주소 

 

4. 패킷 교환 (Packet-switched) :
 - 데이터를 작은 단위[패킷]으로 분리하여 네트워크 회 선 공유 
-송신자와 수신자의 정보 포함 

 

5. 프로토콜(Protocol) : 
- HTTP(HyperText Transfer Protocol : 웹 브라우저와   웹 서버가 통신하는 방법 
 SSL 인증서 를 사용하는 https는  기본포트 443  
- IEEE 802.3 : 물리적 전선에서 비트가 전기적인 신호로   바뀌는 방법 정의 

 

6. IP(Internet Protocol):
 - 군사적인 특성 내포
- 두 지점 사이의 여러 경로를 허용하고 손상된 라우터  주변 데이터의 패킷을 라우팅 할 수 있도록 설계

 

7.TCP(Transmission Control Protocol) :
 - IP 프로토콜 위에서 연결형 서비스 제공 
- 각 연결의 끝에 IP 패킷의 수신 여부 확인 기능과 손상 되거나 손실되 패킷에 대한 재전송 요청기능 추가

 
8. UDP(User Datagram Protocol) : 
- 사용자 데이터그램 프로토콜
-보내는 쪽에서 일방적으로 데이터를 전달하는 
통신 프로토콜


9.포트(Port) :
-TCP와 UDP가 상위 계층에 제공하는 주소 표현 방식
-1에서 655535까지의 숫자로 표현
-1에서 1023까지는 FTP,HTTP와 같이 잘 알려진 서비시 를 위해 미리 예약되어 있음

 
10. 인터넷 :
-IP 프로토콜을 사용하는 컴퓨터들의 집단 


11.인터넷 주소 클래스 :
-InterNIC(Internet Network Information Center) 할당
-A,B,C Class는 네트워크용, D Class는 멀티캐스팅용,E Class는 예비용 

socket 클래스 : 
-소켓은 단순히 시스템 간의 통신을 위한 끝점을 의미
-소켓 인스턴스를 생성하기 위해서는 서버 소켓의 ip주 소와 port번호가 있어야 하고, 소켓 연결이 가능한 
서버가 실행 중 이어야함
-클라이언트 애플리케이션을 생성하려면 socket 클래 스의 인스턴스를 생성해야 함
-이때 생성자에 서버의 ip 주소 또는 호스트 이름과 포 트 번호를 전달해야 함 

 

서버 소켓 클래스 : 자바에서 서버를 작성하기 위해 필요한 모든 것을 제공함 

자바 네트워크 간단한 예제 
package ex.th2;

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

public class MessageClinet {

	public static void main(String[] args) {
		
		Socket socket = null;
		
		DataInputStream din =null;
		DataOutputStream dout = null;
		
		try {
											//중복되지않는 포트번호부여
			 socket = new Socket("localhost",8888);
			 //데이타 입력을 위한 inputStream
			 din = new DataInputStream(socket.getInputStream());
             //서버에서 전송한 데이터를 읽기위한 outputStream
			 dout = new DataOutputStream(socket.getOutputStream());
			 
			 Scanner scan = new Scanner(System.in);
			 
			 String str1 = null; // 받는 데이터
			 String str2 = ""; // 보내는 데이터
			 
			 System.out.println("Server가 접속완료했습니다.");
			 System.out.println("======================================");
			 //str2의 참조하는 인스턴스가 없기 때문에 null을 사용할 수 없다.
			 while(!str2.equals("exit")) {
				
				 //데이터 전송
				 str2 = scan.nextLine();
				 dout.writeUTF(str2);
				 
                 //데이터 수신 
				 str1 = din.readUTF();
				 System.out.println("Server Message : "+str1 );
			 }
					
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			Util.close(socket);
			Util.close(din);
			Util.close(dout);
		}
	}
}
======================================================================================================
package ex.th2;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class MessageServer {
	
	public static void main(String[] args) {
		DataInputStream din = null;
		DataOutputStream dout = null;
		ServerSocket ss = null;	
		Socket socket = null;
		try {
			ss = new ServerSocket(8888);
			
			System.out.println("서버 실행");
			
			System.out.println("=================================");
		
			socket = ss.accept();
			
			System.out.println("client 접속");
			System.out.println("=================================");
			
			din = new DataInputStream(socket.getInputStream());
			dout = new DataOutputStream(socket.getOutputStream());
			
			Scanner scan = new Scanner(System.in);
					//초기화시 공백문자열도 인스턴스가 생기므로 null사용
			String str1  = null; // 받는 메세지
			String str2 = ""; // 보내는 메세지 
			
			while(!str2.equals("exit")) {
				
                //클라이언트와 서버가 접속되면 서버에서 먼저 클라이언트 측에서 데이터를 수신한다.
				str1 = din.readUTF();
				System.out.println("Client Message : "+str1);
				
                //클라이언트의 요청에 맞는 정보를 송신하기 위해
				str2 = scan.nextLine();
				dout.writeUTF(str2);
				dout.flush();
			}		
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			
			Util.close(din);
			Util.close(dout);
			Util.close(ss);
			Util.close(socket);
		}
			/*if(din != null) {
				try {
				din.close();
				} catch (IOException e) {
				e.printStackTrace();
				}
			}
			if(dout != null) {
				try {
					dout.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(socket != null) {
				try {
					socket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(ss != null) {
				try {
					ss.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}*/		
	}
}

'자바' 카테고리의 다른 글

day22  (0) 2021.06.13
day21  (0) 2021.06.13
Day20  (0) 2021.06.01
Day19  (0) 2021.05.31
Day18  (0) 2021.05.28