본문 바로가기

2019년 혁신성장 청년인재 집중양성(빅데이터)/PYTHON 공부 - PY4E

PY4E - Chapter 12 Unicode and UTF-8 in Python (1)

Part 1

 

구글, network hierachy

1. 인터넷 네트워크를 알기 위해서는 계층 구조에 대해 알아야 합니다.
2 기본적으로 서버와 나의 컴퓨터 간의 정보이동이라고 생각하면 되고 각 이동시 하위 계층에서 패킷화 과정이 15-20회 정도 일어난다.

3. 둘 사이의 어떤 연결이 있고, 그 연결을 소켓(Socket)이라고 부른다.
4. 한 컴퓨터에서 프로그램이 실행되면 다른 컴퓨터에서 프로세스가 진행되어 응답을 줍니다.

5. 한 컴퓨터가 소켓에 이야기 하면, 소켓을 통해 다른 컴퓨터가 응답합니다. 이를 데이터의 양방향 통신이라고 합니다.

py4e

 

 

6. 데이터 전화기가 소켓입니다.

7. 어떤 시스템에 말을 걸 것인지, 어떤 서비스, 어떤 프로세스에 접근할 것인지를 포트 번호라고 부릅니다.
8. 소켓만 임포트를 해주면, 포트에 접근하기 쉽습니다.
9. 소캣은 먼저 생성 된 후, 연결 됩니다.
10. 내 소캣에 좌표(주소)와 포트 찍어주고 명령을 내리면 됩니다. 

 



11. 무엇을 보내고 받을 것인지에 대한 설명이 프로토콜 입니다.
12. 각 프로토콜은 그 하위 계층에서 소캣을 사용
13. 프로토콜이란 양쪽이 받아 들일 수 있도록 규칙을 만드는 것입니다.

 



14. 사실 지금 당연하게 쓰고 있는 URL은 굉장히 혁신적인 것입니다. 왜냐하면 프로토콜을 암호화하기 때문입니다.

15. HTTP는 프로토콜이며, HTML은 그 통신으로 돌려받는 문서의 형식 중 하나입니다.
16. 요청-응답 반응은 인터넷 표준을 따릅니다. 이 인터넷 표준은 IETF 의해서 관리됩니다.

17. 이들이 만드는 문서를 RFC라고 합니다.

 

 

 

18. 헤더는 수신할 정보의 메타데이터를 담습니다.

19. 재능있는 헤커는 커맨드라인에 능통합니다.


20. 단 열 줄로, 파이썬은 웹 브라우져를 만들 수 있습니다.

21. 데이터를 받을 때, 헤더와 바디가 오는데 빈줄이 경계선 입니다.


Practice

 

import socket # 먼저 소켓을 임포트 합니다.
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #소켓을 생성합니다.
mysock.connect(('data.pr4e.org', 80)) # 소켓은 하나의 튜플을 매개변수로 가지며, 튜플의 1열은 좌표이며, 2열은 포트넘버입니다.
cmd = 'GET http://data.pr4e.org/romeo.txt HTTP/1.0\r\n\r\n'.encode() # cmd라는 매개변수에 원하는 파일을 저장하기 위하여, 주소를 형식에 맞추어 보냅니다. 이때 유니코드인 파이썬은 utf8 형식으로 인코딩합니다
mysock.send(cmd) #소켓을 통해 cmd를 보냅니다.

while True: #while 반복문을 통해 데이터를 받습니다.
    data = mysock.recv(512) #data는 mysock을 통해 받은 데이터를 512개씩 읽어옵니다.
    if len(data) < 1: #그러다가 읽혀지는 문자가 1도 없으면
        break #멈춥니다.
    print(data.decode(),end='') #그리고 그 data를 다시 유니코드 형식으로 맞추어 출력합니다.

mysock.close() #소캣을 닫습니다.