18-Python 네트워크 프로그래밍
제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
미완, 미속...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.