국비지원학원/Java

47일차~50일차

초코맛 2019. 1. 15. 01:46
반응형

*네트워크(24일,26일)

  • java.net package에서 관련클래스 제공
  • 정의 : 다른컴퓨터와 정보를 주고 받기 위해 생성하고 연결하여 사용하는 객체들.
  •            =>Socket(TCP),SercerSocket(TCP),DatagramPacket(UDP-검증안하고),DatagramSocket(UDP-검증안하고)
  •                 InetAddress : 접속자의 정보얻을때 (ip), URLEncoder,URLDecoder(URL팀버너스리) : 문자열변환
  •                ex)비대면 : id,password / 생체정보
  • 연결만 수행한다. 데이터를 주고 받는건 Stream을 가지고 처리.(네트웍에 Stream을 푹)
  • 입력의 근원과 JVM 출력의 목적지~~다시한번 봄(네트워크가 Stream을 가지고 사용하기 때문에 알고있어야 한다.)
    • 네트워크의 socket으로 데이터를 주고 받게되는데,,,
    • Socket.getInputStream()                         Socket.getOutputStream() =>모니터로도,파일로도, 다른컴퓨터로도 보낼수 있다! 우린3번째 해볼예정
  • 컴퓨터끼리 데이터를 주고받기위해 이미 구축해 놓은 연결 라우터?허브?LIC카드?UTP(언실드트위스트페어?)렌선 으로 연결
  • 렌카드는 MAC주소라는것을 갖고 유일한 값을 갖는다. ip주소도 가짐(네트워크상에서 컴퓨터를 식별할수 있는 주소)
  • 네트워크 : 컴퓨터끼리 정보를 주고 받기 위한 통신망 (2기종 : 팩스,컴-컴: ISDN이라는 종합통신망이 있는데)
  • 그 통신망의 크기로 통신망의 분류 : LAN(perfect network: 짧아서 방해하는 요소가 없어 실패할 게 없다)-MAN-WAN)
  • 허브는 여러개의 (네트워크에 참여하는)컴퓨터를 모으는 일을 한다.
  • 라우터에서 웹사이트를 허브를 통해 물어본다.
  • cat1~7까지 선의 굵기 (마우스,키보드 선의 굵기 정도의 차이)

*개념(OSI 7Layer Reference Model)
=>물데네전세표응(물됬네 전세표 응)
(사용자는 응용계층밖에 보이지 않는다.)
*실제 TCP/IP Model(4계층)

응용계층
사용자가 Application
응용계층(상위 삼계층-자바도 이아래로는 내려가지 못한다.)
표현계층
컴퓨터가 알아볼수 있도록 변환
-암호화(스니핑방지)
섹션계층
상대방 컴퓨터에 가상연결
전송계층
실제연결(프로토콜사용(TCP,UDP))
전송계층
네트워크 계층
길찾기(어떻게 찾아갈건지)
인터넷 계층
데이터링크계층
맥주소를 사용하고
물리계층으로 어떻게 데이터를 연결(매핑)할건지 설정
링크계층
물리계층
렌선(RJ45)을 사용하여 실제 연결
(상대방에게는 물리부터 타고 올라간다.)

네트워크는 중간자공격이 언제든지 발생할수 있다. 물리계층에서 나가서 다른 컴퓨터의 물리계층으로 연결될때.



 

식별하기 위한 호단위 ? =>서비스 리퀘스트(위에있는층에서 아래있는층우로 데이터를 내려줄때)
안녕
값은 페이로드
이름(어떤컴퓨터의 맥주소같은) 데이터(안녕)
넣어준값과 이름틀까지 전체을 감싸 넣어주는 것을 캡슐화
이름[이름 데이터(안녕)]
pdu는 전체를 의미하고 그대로내려준다.
이름[이름[이름 데이터(안녕)]]

..

...
받은사람은 받은 pdu를 조학하여 위로 올려주며 하나씩 까준다.
  • 패킷은 절대로 한줄로 날라가지 않는다. 쪼개놓고 번호를 달아 분산시켜 도착해서 합쳐서 빠진것을 알려준다.
  • 그pdu를 조합하여 까서 위로 올려주면 언캡슐레이션
  • 통신선로 확립 : 3way-handShaking?

  • 우리가 쓰는 환경은 이더넷 환경
  • 자바로 연결할때에는 상위 삼계층을 이용.

*TCP (Transmission Control Protocol)
  • 전화(속도가 느리다)
  • 신뢰성 통신(오류 검출 가능-오류검출하기 위한 패킷 존재)-반드시 데이터 전송(미전송 패킷 다시 보낸다.)
  • 패킷의 크기가 고정되어 있다.(일정=>1packet=>8bit)
  • ex)금융,결제 될때까지 되야함.=>중요한 데이터를 보낼때(결제,은행,,,)
  • Socket, SercerSocket
                                                                                                                                  오류검출의 유무로 속도의 차이

*UDP (User Datagram Protocol)
  • 우편(속도가 빠르다)
  • 비 신뢰성 통신(오류 검출 불가능-검출 위한 패킷없음!)-반드시는 데이터 전송이 되지 않아여(미전송 패킷 다시 보내지 않는다.)
  • packet의 크기를 변경할 수 있다.(최대512byte) 데이터를 쭈우우우우우우욱 연결해서..
  • 중요하지 않은 정보를 전달할 때.(화상채팅,게임) + M2M(r기계끼리 정보를 주고 받을때)
  • DatagramPacket, DatagramSocket

*컴퓨터 환경의 발전사
  • 1980~ 중앙집중식
    • 서버 : 데이터,화면,업무로직
    • 단말기 들이 값들을 가지고 갔다 줬다(과금=RADIUS)... : 서버가 제공하는 데이터를 접속하여 사용만.
  • C/S (네트워크)      : 프로그램 배포(하나하나)
    • 서버 : 데이터, 업무로직
    • 클 : 화면, 간단한 업무로직
  • web 환경(1995~    : 접근성
    • 웹 서버 : 데이터,업무로직,화면
    • 웹 클라이언트 : 웹브라우저 필요) 화면을 받아 브라우저에서 그림(다르게 그려서 웹표준이라는게 나옴)
  • RIA(Rich Internet Application) 환경     : 접속자의 자원을 더 많이 사용하는 (기존의 웹과 다르게 ) =>ex)AJAX
    • 웹 서버 : 데이터, 업무로직
    • 웹 클라이언트 : 화면그림, 업무로직
  • (2+3?)=>요즘 게임환경



-CIS Programming ( Client Server Programming )
  • <클라이언트는 서비스를 누리는일 서버는 클라이언트가 들어오길 기다리는일

                                          

Server     : 정보제공
 Client      :정보를 제공 받는

임의의 포트(랜덤)가 열린다.
그리고 서버로 접속 시도
1.ServerSocket 생성
      동일 port알림 : port 선점(1~65535)//먼저쓰는놈이 임자
       1024번 이하의 port는 이미 열려있는 port가 많다
ServerSocket ss= new ServerSocket(포트번호);
      서버에 자바가상머신이 있을거고 서버가 문을 열어준다.
      OS고 그 사이에 방화벽이 있다.

3.접속자의 소켓을 받는다.
Socket client =ss.accept();//인삿말같은 존재blocking
(서버에서 어셉으로 받은 소켓은 클라이언트에서 보낸 것과 같다.=>주소는 하나이므로)=>소켓은 연결만!
블로킹 메소드라 클라이언트가 들어왔을때만 흘러가고 아니면 대기(이벤트가 터져서 아래로 아래로)
TCP/IP로 연결



데이터보내기>>>Url인코더(변환만)=>쪼개지지는 않는다.
데이터를 쪼개기 위해서 getOutputStream(8bit)출력 스트림.
DataOutputStream : 자바가상 머신밖으로 보내주는일 
:자바의 데이터형을 스트림으로 내보낼 때 사용하는 Stream
기본형도 문자열도 내보낼 수 있다.
3.문자열을 내보내기(쓰기?)
DataOutputStream dos =new DataOutputStream(client.getOutputStream());
//
4.문자열을 쓴다.(JVM안)
dos.writeUTF("문자열");//입력된 문자열이 패킷으로 분할되어 스트림에 기록된다.(조각조각 써진다.)
dos.flush();//소켓에 써진다.
2.Socket생성(입력된 ipaddress와 port를 가지고 서버연결 시도
Socket   socket=new Socket(ip,port); //생성자는 오버로딩















조각조각난 스트림 합쳐..
4.보내온 문자열을 읽기 위한 Stream 사용.
DataInputStream dis=new DataInputStream(socket.getInputStream());
//getInputStream()=JVM까지 넣어준다.
5.읽기(JVM안)
String s=dis.readUTF();//Encording된 한글을 원래대로 조립하여 보여준다.(표현계층)

 

*Network
  • 컴퓨터 상호간 데이터를 주고 받기 위한 통신망(협의-컴퓨터끼리/ 광의-뭐든? 인터넷전화든 팩스든 모든 통신 포함??)
  • 프토로콜(통신 규약)
  • TCP/UDP
  • Java.net Package에서 제공하는 Socket class사용 
    • TCP : ServerSocket, Socket
    • UDP  : DatagramSocket, DatagramPacket
  • OSI 7Layer Reference Model 에 의해 통신하게 되는데,
    • 응용 : 응용 프로그램 (값 =body=payload)
    • 표현 : 컴퓨터에 어떻게 표현할 것인가 변환.
    • 세션 : 가상연결 (호단위(호 : 컴퓨터 네트워크 하나하나를 말함/집의 호?) 연결)
    • 전송 : 실제연결( TCP / UDP )
    • 네트워크 : 길찾기(IP)
    • 데이터 링크 : MAC주소 사용, Media에 어떻게 링크 할지(미디어 : 연결매체 (ex/랜선, 이더넷))
    • 물리 : NIC, 데이터를 보내는 일(보내거나 받는)
  • CAT1~5(선의 두께!  -두께가 다르다)
  • 응용 전송(표현 세션 전송) 인터넷 계층 링크 계층을 TCP Model이라고 하고      <월요일날 알려준거랑 다름
  • <Server쪽 JVM의 포트를 열고 라우터를 거쳐 Client쪽 JVM의 열린포트로 연결되는걸 간단하게 통로하나로 표현.>
  • 1.Port 열기 
    • ServerSocket s=new ServerSocket(port);//port는 0~65535   1024번 이하의 port는 이미 사용중인 포트가 많다(선점)  그 이후로 열도록 하자=>Well Known port 이미다 알고있는 포트?1024번 이하의 포트
  • 2.Sorket 생성 //서버주소, port    =>comB에서 (클라이언트)에서 발생
    • Socket s= new Socket("127.63.89.xx",3000/*port*/);=>외부컴퓨터 / 내컴퓨터로 연결시도.
  • 3.접속자 소켓을 받는다.
    • Socket client=s.accept();//호단위 연결?
    • //멈추어있다가 이벤트가있을때 넘어간다=>블로킹메소드
  • 4.데이터를 보내기 위한 Stream을 얻는다.
    • DataOutputStream dos=new DataOuputStream(client.getOutputStream());
  • 5.스트림에 데이터를 기록(문자열=>Encording=>packet단위 쪼개는 일)
    • dos.writeUTF("문자열");
  • 6.분출
    • dos.flush();
  • 7.서버에서 보내오는 데이터를 받기 위한 Stream 연결     =>comB에서 (클라이언트)에서 발생
    • DataInputStream dis=new DataInputStream(s.getInputStream());
  • 8.읽어들인 Encording된 데이터를 원래데로 Decording 하는 일              =>comB에서 (클라이언트)에서 발생
    • String s=dis.readUTF();

 
Session Layer (3-way handshaking:호 확립)
client

Server
close

close
open
SYN
===========>
Open

2.SYN+ACK
<===========


3.ACK
===========>
ESTABLE SHED?
<<<<<관리자권한으로 CMD를 열어 프로토콜의 연 사람?알수 있다.
->netstat -ab
<<<<<한번 열면 이렇게 열려있는지 알수있다 (대기 상태)=>연결이 되면 끊어진다.
TCP 0.0.0.0:3000 LISTENING

[javaw.exe]

이렇게 나오기 때문에 열린번호인지 상태가 무슨상태인지 어디서 열린건지 알수 있다. 

 

*채팅창 처럼 만들예정-잘만들면 안되고 잘못만들면 된닷
<<1:1 실시간 채팅창을 만들거고, 실시간인만큼 readUTF로 계속 읽어들여야 한다 (무한루프)
<<Thread의 사용전이므로 돌아가지 않는것이 정상!(요즘엔 너무 좋아져서 돌아가기도...)

 


 

 
*Thread(27일)
  • 동시에 일을 처리해야 할 때 사용. (동시에 여러 method를 호출)
  • (좋은걸까? => 잘쓸때에만~!=>어렵...)
  • 작은 process(CPU가 한번에 처리하는 일(사용자가 실행하는 프로그램/OS가 운영하기 위해 실행하는 프로그램)의 단위)
  • 멀티테스킹(한번에 여러개의 프로그램을 실행할수 있는것.(게임도 인터넷도 다 띄울때) 눈에 안보이더라도 여러개의 프로그램이 실행되고 있는게 멀티스레드.
  • java는 Multi Thread(멀티스레드) 지원.
  • Thread가 사용된 코드는 종료시간을 측정할 수 없다.
  • Thread는 Runnable interface 또는 Thread class로 thread를 사용할 수 있다.(권장하지는 않지만 꼭 필요하다.)
  • 자바는 선점형 Thread (작업관리자가 필요 없다.-이것도 하나의 차지..=>가볍)
    • yield 먼저//넘겨주다?
    • 계속 선점하고 있으면 뒤에 기다리고 있는 쓰레드들이 deadlock
    • 그 선점하고 있는걸 강제로 뜯어내는걸 Interrupted//중단된 (도스창에서의 컨트롤+c  윈도우에서는 컨트롤+알트+델리트  컴퓨터는 전원!!)
    • (살아있다고 보고 죽였다 kill =>더이상 작업할수 없어 종료되었다고 봄.)
    •   ===>간단하게 구현되고 사용된다.
  • //시분할 CPU 스케일링?(ex-Window) 시간을 잘러?. 작업관리자의 역할이 매우 중요(실행된 cpu에 점유하는시간?-아무리 빠른 cpu를 쓰더라도 동작하지 않을수 있다.?그만큼중요.

     

    <<cmd창의 경우 java파일을 열면 다른 프로그램을 동시에 실행시킬 수 없다. 한번에 하나의 프로그램밖에 실행되지 않는다.

(28일은 미니 project 발표)-21일 밤~27일 밤 동안 준비

login후-log파일을 불러들여-분석하여 횟수를 count하고-원하는경우에 report로 파일생성

class diagram과 주요부분Flowchart ppt로 발표.

 

 

 

반응형

'국비지원학원 > Java' 카테고리의 다른 글

53일차  (0) 2019.01.17
51~52일차  (0) 2019.01.16
44~46일차  (0) 2019.01.14
43일차  (0) 2018.12.20
42일차  (0) 2018.12.20