01. 네트워크 개론
1. IP and Port의 이해
- TCP/IP 프로토콜은 IP와 PORT 정보를 이용하여 사용됩니다.
- 프로토콜은 인간의 언어 처럼 2대 이상의 컴퓨터가 서로 데이터를 주고받는 하드웨어적, 소프트웨어적 규칙(규격)을 말합니다.
110: POP3 , 메일 수신
1521 : Oracle DBMS 기본 포트, DBMS
3306 : MySQL DBMS 기본 포트, DBMS
3690 : SVN 소스 동기화 개발 서버
2. IP의 확인: ipconfig (linux: ifconfig)
1) IP Address. . . . . : 172.16.7.1
- 서버 강제 종료: 작업 관리자 -> python.exe 종료
1. Echo 서버의 제작
1) Server 프로그램의 기본 처리 형태
① 소켓 객체 생성: socket.socket()
↓
② 생성한 소켓을 서버 IP 및 PORT와 바인드:sock.bind()
↓
③ 처리 가능한 연결 수 설정: socket.listen()
↓
④ 클라이언트 요청을 기다리고 연결 요청이 오면 수락: socket.accept()
↓
⑤ 클라이언트 요청 메시지 수신: socket.recv()
↓
⑥ 수신 메시지에 대한 처리
↓
⑦ 클라이언트로 응답 데이터 송신: socket.sendall() None 리턴, socket.send() 송신한 바이트 리턴
↓
⑧ 소켓 객체 제거: socket.close()
2) 실행
/ws_python/oop/network>python EchoServer1.py
▷ network.EchoServer1.py
- 한명의 접속자만 처리 가능
-----------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import socket
HOST = ''
PORT = 9009
def runServer():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: # 자동 close
sock.bind((HOST, PORT)) # 연결
sock.listen(1) # 동시 처리
print('클라이언트 연결을 기다리는 중...')
conn, addr = sock.accept() # 접속 대기
with conn:
print('[%s]와 연결됨' %addr[0])
while True:
data = conn.recv(1024) # 1024 byte 수신
if not data: # 수신 데이터가 없으면 순환문 종료
break
print('메시지 수신 [%s]' %data.decode()) # 수신 데이터 출력, 한글 처리
# Client에게 다시 전송, 모두 전송하면 None 리턴
conn.sendall(data)
runServer()
-----------------------------------------------------------------------------------
2. Echo client의 제작
1) Client 프로그램의 기본 처리 형태
① 소켓 객체 생성: socket.socket()
↓
② 서버에 연결:socket.connect()
↓
③ 서버로 메시지 전송: socket.send()
↓
④ 서버로부터 데이터 수신: socket.recv()
↓
⑤ 소켓 객체 제거: socket.close()
2) 실행
/ws_python/oop/network>python EchoClient1.py
▷ network.EchoClient1.py
-----------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import socket
HOST = 'localhost'
PORT = 9009
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: # 자동 close
sock.connect((HOST, PORT))
msg = input('메시지 입력: ')
sock.sendall((msg.encode())) # 한글 -> ASCII 코드 16진수로 변환
data = sock.recv(1024) # 수신 대기
print('에코 서버로부터 받은 데이터 [%s]' %data.decode())
-----------------------------------------------------------------------------------
1. Server
예) 맛집, 산, 바다, 계절별, 여행(국내/해외), 영화, 도서, 휴양림, 휴계소등
- 통신중인 컴퓨터는 같은 형식의 데이터를 주고받아야하며
서버에서 전달하는 문자열은 형식을 가지고 있습니다.
예) 형식화된 Text, CVS( 콤마 구분 파일), JSON(문자열 객체),
XML(사용자 정의 태그), 기타 파일
- 서버 실행을 Eclipse에서 진행할시 서버 화면이 감추어지며, 이클립스 종료시
서버가 계속 살아 있을 수 있습니다. 따라서 Eclipse에서는 서버를 실행하지 않습니다.
콘솔에서 실행합니다.
[실행 화면]
/ws_python/oop/network>python ExamServer1.py
▷ network.ExamServer1.py
-----------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import socket
HOST = ''
PORT = 9009
def runServer():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: # 자동 close
sock.bind((HOST, PORT)) # 연결
sock.listen(1) # 동시 처리
while True:
print('클라이언트 연결을 기다리는 중...')
conn, addr = sock.accept() # 접속 대기
with conn:
print('[%s]와 연결됨' %addr[0])
# Client에게 다시 전송, 모두 전송하면 None 리턴
conn.sendall('동해/남해/서해'.encode())
runServer()
-----------------------------------------------------------------------------------
- 실행 옵션:
import sys
[실행 화면]
▷ network.ExamClient1.py
-----------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
import socket
HOST = 'localhost'
PORT = 9009
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: # 자동 close
sock.connect((HOST, PORT))
data = sock.recv(1024) # 수신 대기
values = data.decode().split('/')
print('서버로부터 받은 데이터 [%s]' %values[0])
print('서버로부터 받은 데이터 [%s]' %values[1])
print('서버로부터 받은 데이터 [%s]' %values[2])
-----------------------------------------------------------------------------------
'빅데이터 프로그래밍 > Python' 카테고리의 다른 글
[Python] 17. [Network] threading module, 채팅 서버/클라이언트 제작 (0) | 2017.08.02 |
---|---|
[Python] 16. [Network] socketserver 네트워크 프레임워크, Echo Server 2, 파일 송수신 (0) | 2017.08.02 |
[Python] 14. [IO] 데이터 파일을 읽어 성적, 연봉, 단풍 여행 처리 시스템을 작성하세요. (0) | 2017.08.02 |
[Python] 13. [IO] IO(입출력), File 클래스 다루기, 파일 이동, 디렉토리 조작, 파일 목록, 파일 복사 (0) | 2017.08.02 |
[Python] 12. 예외처리(Excetption), try, except ~ else ~ finally 실습 (0) | 2017.08.02 |
댓글