[Python] 15. [Network] Network(네트워크), Socket, Echo Server 1

2017. 8. 2. 17:30·빅데이터 프로그래밍/Python
728x90
반응형

01. 네트워크 개론

1. IP and Port의 이해

- TCP/IP 프로토콜은 IP와 PORT 정보를 이용하여 사용됩니다.
- 프로토콜은 인간의 언어 처럼 2대 이상의 컴퓨터가 서로 데이터를 주고받는 하드웨어적, 소프트웨어적 규칙(규격)을 말합니다.

- IP 하나당 사용 가능한 포트 : 0 ~ 65535 (2Byte)
- 알려진 개발자가 사용할 수 없는 포트(Well known port)
20, 21 : FTP, 파일 전송
22 : Secure Shell 접속, SSH, 서버 콘트롤, 원격 서버 조작.
23 : Telnet, 원격 접속, 서버 콘트롤, 보안성이 없음.
25 : SMTP, 메일 전송
80 : HTTP, Apache, IIS등 웹서버, 인터넷 웹 페이지 서비스
110: POP3 , 메일 수신 
1433 : MS-SQL DBMS 기본 포트, DBMS
1521 : Oracle DBMS 기본 포트, DBMS
3306 : MySQL DBMS 기본 포트, DBMS
3690 : SVN 소스 동기화 개발 서버
8080 : Apache, 기타 웹 서버, 오라클 DBMS 웹서버
- 1500번 이하는 시스템이 사용하는 포트가 많음으로 1500번 이상 사용을 권장합니다. 10000번 이상 사용하면 충돌이 거의 없음.
 

2. IP의 확인: ipconfig (linux: ifconfig) 
1) IP Address. . . .  . : 172.16.7.1

  
02. Socket, ServerSocket

- 서버 강제 종료: 작업 관리자 -> 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] 서버로부터 문자열을 전달받는 프로그램의 제작
- 실행시 console 창에서 start를 실행하면 경로가 자동으로 이동됩니다.
 
1. Server
- 서버에서 전달하는 항목: 추천하는 문자열을 접속자에게 전송합니다.
예) 맛집, 산, 바다, 계절별, 여행(국내/해외), 영화, 도서, 휴양림, 휴계소등

- 통신중인 컴퓨터는 같은 형식의 데이터를 주고받아야하며
서버에서 전달하는 문자열은 형식을 가지고 있습니다.
예) 형식화된 Text, CVS( 콤마 구분 파일), JSON(문자열 객체),
XML(사용자 정의 태그), 기타 파일

- 서버 실행을 Eclipse에서 진행할시 서버 화면이 감추어지며, 이클립스 종료시
서버가 계속 살아 있을 수 있습니다. 따라서 Eclipse에서는 서버를 실행하지 않습니다.
콘솔에서 실행합니다.


[실행 화면]
/ws_python/oop/network>python ExamServer1.py 

 

클라이언트 연결을 기다리는 중..
[127.0.0.1]와 연결됨
 
▷ 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()        
        
        

-----------------------------------------------------------------------------------

 

2. Client
- 실행 옵션: 
  import sys
  dest = sys.argv[1]

[실행 화면]
/ws_python/oop/network>python ExamClient1.py 172.16.7.100
[여행 추천]
서버로부터 받은 데이터 [동해]
서버로부터 받은 데이터 [남해]
서버로부터 받은 데이터 [서해]
▷ 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])


-----------------------------------------------------------------------------------
 

 

728x90
반응형

'빅데이터 프로그래밍 > 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
'빅데이터 프로그래밍/Python' 카테고리의 다른 글
  • [Python] 17. [Network] threading module, 채팅 서버/클라이언트 제작
  • [Python] 16. [Network] socketserver 네트워크 프레임워크, Echo Server 2, 파일 송수신
  • [Python] 14. [IO] 데이터 파일을 읽어 성적, 연봉, 단풍 여행 처리 시스템을 작성하세요.
  • [Python] 13. [IO] IO(입출력), File 클래스 다루기, 파일 이동, 디렉토리 조작, 파일 목록, 파일 복사
밍글링글링
밍글링글링
mingling - 밍글링, 밍글밍글링. 코드와 어우러지다. IT/ 프로그래밍/소스
    반응형
    250x250
  • 밍글링글링
    mingling
    밍글링글링
  • 전체
    오늘
    어제
    • 밍글링글링 (407) N
      • Flutter (2)
      • 일상생활 (8)
        • 리뷰 (1)
        • 생활정보 (4)
        • 맛집 (0)
        • 여행 (0)
        • 모든정보 (3)
      • JAVA (126)
        • 개념 (6)
        • 예제 (115)
        • Exception (2)
      • C (1)
        • C (1)
        • C++ (0)
        • C# (0)
      • JS (29)
        • JavaScript (18)
        • JQuery (5)
        • AJax (0)
        • NODE.JS (6)
        • Angular.JS 2.0 (0)
      • WEB (87)
        • HTML (6)
        • CSS (61)
        • JSP (20)
        • JSTL (0)
      • FrameWork (8)
        • Spring (8)
        • BootStrap (0)
        • MyBATIS (0)
        • JUnit (0)
      • 외부 라이브러리 (5)
      • 공유 소스 관리 (5)
        • Git (5)
        • SVN (0)
      • 빅데이터 프로그래밍 (37)
        • Python (37)
        • R Programming (0)
      • DB (7)
        • ORACLE (0)
        • MySql (6)
      • Development Tools (7)
        • StarUML (0)
        • eXERD (0)
        • Eclipse (4)
      • SKILL (6)
        • Migration (0)
        • Security (6)
      • MicroSoft (0)
        • Excel (0)
        • Word (0)
      • Android (0)
      • Server (21)
        • Ubuntu (5)
        • Linux (15)
      • IOS (0)
      • XML (0)
      • 미디어 (0)
      • 공지사항 (3)
      • NETWORK (1)
      • 게임 (4)
        • 피파 (1)
        • 리니지M (0)
        • 배틀그라운드 (1)
        • 듀랑고 (2)
      • 세상 이슈 (6)
      • 일렉트론 (0)
      • 대회 소식 (4)
      • 업무 (2)
      • Express, Vue (6)
      • docker (11)
      • svelte (3)
      • 블록체인 (1)
      • IT (10) N
      • Rust (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    docker
    자바 배열
    API 설계
    자바 생성자
    자바 객체 지향
    spring java
    Rust lang
    러스트
    프런트엔드
    vue 설치
    Java Array
    jsp parameter
    오류
    java casting
    에디터 팁
    브라우저 자동화
    VS Code 팁
    vue cli
    Node
    rust linux
    AI 코딩 에이전트
    lang rust
    proxy pass
    ubuntu
    servlet class
    nginx ssl 설정
    css tb
    nginx
    리눅스 설치
    자바 for문
    자바 클래스
    css block
    css transition
    ssl 인증서 발급
    nginx ssl 적용
    SSL 인증서
    css float
    티스토리 자동화
    vscode
    자바 exception
    svelte
    css list
    클론코딩
    mysql db
    Extension Bisect
    css table
    jsp include
    gitlab 설치
    React Compiler
    css perspective
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
밍글링글링
[Python] 15. [Network] Network(네트워크), Socket, Echo Server 1
상단으로

티스토리툴바