18-Python 네트워크 프로그래밍

10326 단어
  • 제18장 네트워크 프로그래밍과 통신
  • 1 네트워크 프로그래밍의 기본 개념
  • 11 네트워킹 기초
  • 12 TCPIP 프로토콜 소개
  • 13 IP 주소 및 도메인 이름
  • 14 통합 리소스 로케이터 URL
  • 2 기초 socket 모듈의 네트워크 프로그래밍
  • 21 socket 개요
  • 소켓
  • TCP 커뮤니케이션 프로그램 설계
  • UDP 통신 프로그램 설계
  • 22 socket 대상 만들기
  • 23 서버 socket을 지정한 주소로 연결
  • 호스트 이름 및 IP 주소
  • socket 대상을 IP 주소로 귀속
  • 24 서버 소켓 탐지 시작
  • 25 연결 및 수신
  • 26 데이터 전송 및 수신
  • TCP
  • UDP

  • 27 단순 TCP 프로그램 Echo Server


  • 제18장 네트워크 프로그래밍과 통신


    18.1 네트워크 프로그래밍의 기본 개념


    18.1.1 네트워크 기초 지식


    18.1.2 TCP/IP 프로토콜 소개


    18.1.3 IP 주소 및 도메인 이름


    18.1.4 URL 통합 리소스 로케이터


    전송 프로토콜://호스트 IP 주소(또는 도메인 이름) [:포트 번호]/리소스가 있는 경로 및 파일 이름

    18.2 기초 socket 모듈의 네트워크 프로그래밍


    socket:IP 주소 + 포트 번호 1개

    18.2.1 socket 개요


    1. 소켓


    2. TCP 통신 프로그램 설계

    server
    socket() bind() listen() accept() *() close() client socket() connect() *() close()

    3. UDP 통신 프로그램 설계

    server
    socket() bind() *() close() client socket() *() close()

    18.2.2 socket 대상 만들기

    #  , 
    socket(family = 2, type = 1, proto = 0, fileno = None)
    family(  AF_INET)
        AF_INET  -----------> ipv4
        AF_INET6 -----------> ipv6
    type(  SOCKET_STREAM)
        SOCKET_STREAM  -----> TCP
        SOCKET_DGRAM   -----> UDP

    ex:
    import socket
    s1 = socket.socket()    #  TCP 
    s2 = socket.socket(socket.AF_INET, socket.SOCKET_STREAM) #  TCP 
    s3 = socket.socket(socket.AF_INET, socket.SOCKET_DGRAM)  #  UDPP 

    18.2.3 서버 socket을 지정한 주소로 연결


    1. 호스트 이름 및 IP 주소

      IP  
    socket.gethostname()                #  
    socket.gethostbyname(hostname)      #   IP  
    socket.gethostbyname_ex(hostname)   #  (hostname, aliaslist, ipaddrlist)
    getfqdn([name])                     #  
    gethostbyaddr(ip_address)           #   IP  (hostname, aliaslist, ipaddrlist)
    getservbyname(servicename [, protocolname])     #  

    2. socket 대상을 IP 주소로 귀속


    sock.bind(address) # address:ip + port
    ex:
    sock = socket.socket()      #  socket 
    
    sock.bind('localhost', 8000)
    sock.bind(socket.gethostname(), 8001)
    sock.bind('127.0.0.1', 8002)

    18.2.4 서버 socket 스누핑 시작


    sock.listen(backlog) # backlog는 최소 1의 최대 연결 수입니다.
    ex:
    sock.listen(5)

    18.2.5 연결 및 수신 연결


    연결: 클라이언트 측 socket 대상은connect 방법을 통해 서버 측 socket 대상에 대한 연결을 시도합니다
    client_sock.connect(address) # address:ip + port
    수신 연결: 서버 측 socket 대상은 accept 방법을 통해waiting 상태로 들어갑니다
    clientsocket, address = server_sock.accept () # clientsocket은 새 socket 대상이며 서버는 클라이언트와 통신하고address는 대응하는 IP 주소입니다

    18.2.6 데이터 전송 및 수신


    TCP:


    socket 대상 방법
    send(bytes) # 발송 데이터bytes, 실제 발송된 바이트 수sendall(bytes) # 발송 데이터bytes를 되돌려주고 지속적으로 발송한다.None을 성공적으로 반환했습니다. 그렇지 않으면 오류 recv(bufsize) # 수신 데이터, 수신한 데이터,bytes 대상,bufsize가 수신한 데이터의 최대 바이트 수입니다.

    UDP:


    send(bytes) # 데이터 보내기bytes, 실제 보낸 바이트 수recvfrom(bufsize[,flags]) # 데이터 보내기, 원조(bytes,address) 되돌려주기 ->address: 보내는 목표 주소

    18.27 단순 TCP 프로그램: Echo Server

    # ChatServer.py Echo Server
    import socket
    serversocket = socket.socket()                      #  socket
    serversocket.bind(('127.0.0.1', 8000))                #  IPaddress port
    serversocket.listen(1)                              #  
    clientsocket, clientaddress = serversocket.accept() #  accept 
    print('Connection from ', clientaddress)            #  
    while 1:
        data = clientsocket.recv(1024)                  #  
        if not data:
            break
        print('Received from client: ', repr(data))     #  
        print('ECHO: ',repr(data))                      #  
        clientsocket.send(data)                         #  
    clientsocket.close()                                #    socket
    serversocket.close()                                #  socket
    # ChatClient.py
    import socket
    clientsocket = socket.socket()                      #  socket  
    clientsocket.connect(('127.0.0.1',8000))            #  
    while 1:
        data = input('>')
        clientsocket.send(data.encode())                #  bytes , 
        if not data:
            break
        newdata = clientsocket.recv(1024)               #  
        print('Received from server: ', repr(newdata))  
    clientsocket.close()                                #  socket

    미완, 미속...

    좋은 웹페이지 즐겨찾기