파이썬

파이썬) 8. 네트워크

37_KIM 2022. 7. 20. 21:17

 

 

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()