파이썬) 8. 네트워크
8. 네트워크
(1) 네트워크
여러 컴퓨터 장비들이 데이터를 공유할 수 있게 연결된 '통신망' 이다
LAN : Local Area Network 근거리 네트워크(근거리 통신망)
WAN : Wide Area Network (어떻게보면 랜들의 집합)
Star형 : 중앙 장비에 모든 노드가 연결된 형태 ex)집에있는 공유기를 통해서 핸드폰,컴퓨터,TV등 연결된다
Mesh형 : 여러 노드들이 서로 그물처럼 연결된 형태 ex) 인터넷이 이 형태로 연결되어있음 / 실제 인터넷은 여러 형태를 혼합한형태의 혼합형
네트워크프로토콜은 양식이고 여러가지가 있다
(2) 인터넷
전세계를 연결하는 네트워크
(3) 웹 서비스
문서, 그림과 같은 데이터를 인터넷을 통해 주고 받는 서비스
(4) 서버 클라이언트 모델
1) 서버
프로그램, 서버 프로그램이 실행중인 컴퓨터가 서버 컴퓨터
2) 클라이언트
게임 클라이언트, 카톡, 웹브라우저(웹서버한테 데이터를 받아와서 보여준다)
#네트워크를 통해서 데이터를 주고 받는 모든 것들은 클라이언트 프로그램과 서버 프로그램이 서로 연결된 후 데이터를 주고받는다
(5) 파이썬 소켓 서버 프로그래밍
※ socket이 중요한게 아니고 서버와 클라이언트를 파이썬으로 짠다는 것에 의미를 둘 것
남이 만들어놓은 함수를 어떻게 활용하는지에 의미를 둘 것
import socket #네트워크 입출력(하드웨어 장치와의 통로)
host = '127.0.0.1'
port = 9999
아래는 서버 프로그램
import socket # 네트워크 입출력(하드웨어 장치와의 통로)
host = '172.0.0.1' # IP주소
port = 9999 # 포트 번호
# 서버 소켓(랜 카드와의 통로) 생성, 사용할 프로토콜 IPv4, TCP
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 서버 소켓 통로에 IP주소와 포트번호 설정
server_socket.bind((host, port)) #클라이언트가 host아이피주소와 port포트로 접속
# 서버의 상태를 listen(클라이언트 접속 대기)로 변경
server_socket.listen(0) #서버를 킨거
# 클라이언트가 접속하면 해당 접속을 허용
client_socket, addr = server_socket.accept() #클라이언트가 접속할 때까지 끝나지 않고 계속 동작중
while True : #무한루프
print(addr,'접속중')
아래는 클라이언트 프로그램
import socket
host = '172.0.0.1' # IP주소
port = 9999 # 포트번호
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#서버의 IP주소와 포트번호로 접속
client_socket.connect((host,port))
while True : #무한루프
print('동작중')
★서버가 실행되어야 클라이언트가 접속가능★
클라이언트가 접속하면 서버가 동작이 멈춤
이번엔 서버쪽에서 클라이언트소켓한테 받는다 서로 메세지를 한번씩만 보낼 수 있다
- 서버나 클라이언트에서 연속적으로 보내도 한번씩받게 받지 못함 input() 한번 받으면 리턴하게 되어있으므로..
서버 프로그램
import socket # 네트워크 입출력(하드웨어 장치와의 통로)
host = '127.0.0.1' # IP주소
port = 9999 # 포트 번호
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen(0)
client_socket, addr = server_socket.accept()
while True:
recv_data = client_socket.recv(65535) #이1 줄이랑
print(recv_data) # 이1줄은 받는코드
send_data = input() # 이2 줄과
client_socket.send(send_data.encode('utf-8')) #이2줄은 보내는코드
#'utf-8'는 인코딩:글자가 깨지지 않게 우리가 공통적으로 쓰는 언어로 인코딩
client_socket.close()
server_socket.close()
클라이언트 프로그램
import socket
host = '127.0.0.1'
port = 9999
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 서버의 IP주소와 포트번호로 접속
client_socket.connect((host, port))
while True:
send_data = input()
client_socket.send(send_data.encode('utf-8'))
recv_data = client_socket.recv(65535)
print(recv_data)
-------------------------------------------------------------------------------------------------
변수이름을 짧게 표현하자면
import socket # 네트워크 입출력(하드웨어 장치와의 통로)
host = '127.0.0.1' # IP주소
port = 9999 # 포트 번호
서버 클라이언트
ss = socket.socket(ipv4, tcp) cs = socket.socket(ipv4, tcp)
ss.bind((host, port))
ss.listen(0)
cs, addr = server_socket.accept()
cs.connect((host, port))
while True: while True:
data = input()
data = cs.recv(65535)
cs.send(data.encode('utf-8'))
print(data)
cs.close() cs.close()
ss.close()