1. 네트워킹의 기초 개념
1.1 네트워크란 무엇인가
네트워크(Network)는 컴퓨터나 장치들이 상호 연결되어 데이터를 주고받을 수 있는 구조입니다. 예를 들어, 인터넷은 전 세계의 컴퓨터들이 연결된 거대한 네트워크입니다.
1.2 클라이언트와 서버의 개념
클라이언트(Client): 서비스를 요청하는 컴퓨터나 프로그램입니다.
서버(Server): 클라이언트의 요청을 받아 응답하는 컴퓨터나 프로그램입니다.
1.3 IP 주소와 포트 번호의 개념
IP 주소: 네트워크 상에서 장치를 식별하기 위한 고유한 숫자 주소입니다.
포트 번호: 특정 IP 주소의 특정 서비스에 접근하기 위한 번호입니다.
1.4 Python에서 네트워킹 관련 라이브러리 소개
Python은 socket, http.client, urllib 등의 네트워킹 관련 라이브러리를 제공합니다.
2. 소켓 프로그래밍
2.1 socket 모듈을 사용한 소켓 프로그래밍 기초
socket 모듈을 사용하여 네트워크 상에서 클라이언트와 서버 간에 데이터를 주고받을 수 있습니다.
import socket
2.2 서버 소켓과 클라이언트 소켓의 차이
서버 소켓: 클라이언트의 요청을 받아들이는 역할을 합니다.
클라이언트 소켓: 서버에 연결을 요청하고, 데이터를 주고받습니다.
2.3 간단한 TCP 서버와 클라이언트 프로그램 작성
TCP 서버 코드:
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen(1)
print("서버 대기 중...")
conn, addr = server_socket.accept()
print(f"{addr}에서 접속됨")
data = conn.recv(1024)
print(f"받은 데이터: {data.decode()}")
conn.sendall("Hello, Client!".encode())
conn.close()
TCP 클라이언트 코드:
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 12345))
client_socket.sendall("Hello, Server!".encode())
data = client_socket.recv(1024)
print(f"서버로부터 받은 데이터: {data.decode()}")
client_socket.close()
2.4 소켓 프로그래밍에서 발생하는 오류 처리
소켓 프로그래밍에서 연결 실패, 타임아웃 등의 오류는 try, except 구문으로 처리할 수 있습니다.
try:
client_socket.connect(('localhost', 12345))
except socket.error as e:
print(f"연결 오류: {e}")
3. 네트워킹 프로그램 예제
3.1 간단한 채팅 프로그램 만들기
서버 코드:
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen(1)
print("채팅 서버 대기 중...")
conn, addr = server_socket.accept()
print(f"{addr}에서 접속됨")
while True:
msg = conn.recv(1024).decode()
if msg.lower() == "exit":
print("클라이언트 연결 종료")
break
print(f"클라이언트: {msg}")
reply = input("서버: ")
conn.send(reply.encode())
conn.close()
클라이언트 코드:
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 12345))
while True:
msg = input("클라이언트: ")
client_socket.send(msg.encode())
if msg.lower() == "exit":
print("서버와 연결 종료")
break
reply = client_socket.recv(1024).decode()
print(f"서버: {reply}")
client_socket.close()
3.2 파일 전송 프로그램 구현
서버 코드:
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen(1)
print("서버 대기 중...")
conn, addr = server_socket.accept()
with open('received_file.txt', 'wb') as f:
print("파일 수신 중...")
while True:
data = conn.recv(1024)
if not data:
break
f.write(data)
print("파일 수신 완료")
conn.close()
클라이언트 코드:
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 12345))
with open('send_file.txt', 'rb') as f:
print("파일 전송 중...")
for data in f:
client_socket.sendall(data)
print("파일 전송 완료")
client_socket.close()
'python' 카테고리의 다른 글
20편 Python 프로젝트와 실전 예제 (0) | 2024.11.24 |
---|---|
18편 Python 고급 문법: 클래스와 객체의 고급 기능 (0) | 2024.11.22 |
17편 Python 기초 문법: 데이터베이스와 SQLite (0) | 2024.11.21 |
16편 Python 기초 문법: 데이터 시각화 (2) | 2024.11.20 |
15편 Python 기초 문법: 외부 라이브러리 사용하기 (0) | 2024.11.19 |