본문 바로가기
Python 문법/Python 기본 문법(3.10 기준)

[python3.10 기본] 21. 네트워킹

by cogito21_python 2024. 7. 2.
반응형

21.1 socket 프로그래밍

socket 모듈을 사용하여 TCP 및 UDP 소켓 프로그래밍을 수행할 수 있습니다.

 

TCP 서버 예제

import socket

def tcp_server():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('localhost', 8080))
    server_socket.listen(5)
    print("Server is listening on port 8080")

    while True:
        client_socket, addr = server_socket.accept()
        print(f"Connection from {addr}")
        client_socket.sendall(b'Hello, TCP Client!')
        client_socket.close()

if __name__ == "__main__":
    tcp_server()

TCP 클라이언트 예제

import socket

def tcp_client():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('localhost', 8080))
    message = client_socket.recv(1024)
    print(f"Received message from server: {message.decode()}")
    client_socket.close()

if __name__ == "__main__":
    tcp_client()

UDP 서버 예제

import socket

def udp_server():
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_socket.bind(('localhost', 8081))
    print("UDP Server is listening on port 8081")

    while True:
        message, addr = server_socket.recvfrom(1024)
        print(f"Received message from {addr}: {message.decode()}")
        server_socket.sendto(b'Hello, UDP Client!', addr)

if __name__ == "__main__":
    udp_server()

UDP 클라이언트 예제

import socket

def udp_client():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    client_socket.sendto(b'Hello, UDP Server!', ('localhost', 8081))
    message, addr = client_socket.recvfrom(1024)
    print(f"Received message from server: {message.decode()}")
    client_socket.close()

if __name__ == "__main__":
    udp_client()

21.2 HTTP 클라이언트 (requests 모듈)

requests 모듈은 HTTP 요청을 간편하게 보낼 수 있는 라이브러리입니다.

 

GET 요청

import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts')
if response.status_code == 200:
    posts = response.json()
    for post in posts[:5]:
        print(f"Title: {post['title']}")

POST 요청

import requests

data = {
    'title': 'foo',
    'body': 'bar',
    'userId': 1
}

response = requests.post('https://jsonplaceholder.typicode.com/posts', json=data)
if response.status_code == 201:
    post = response.json()
    print(f"Created post with ID: {post['id']}")

헤더 설정 및 파라미터 전달

import requests

headers = {'User-Agent': 'my-app/0.0.1'}
params = {'userId': 1}

response = requests.get('https://jsonplaceholder.typicode.com/posts', headers=headers, params=params)
if response.status_code == 200:
    posts = response.json()
    for post in posts:
        print(f"Title: {post['title']}")

21.3 웹 소켓 프로그래밍

웹 소켓은 실시간 양방향 통신을 위한 프로토콜입니다. 파이썬에서는 websockets 라이브러리를 사용하여 웹 소켓 서버와 클라이언트를 구현할 수 있습니다.

 

웹 소켓 서버 예제

import asyncio
import websockets

async def echo(websocket, path):
    async for message in websocket:
        await websocket.send(message)

start_server = websockets.serve(echo, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

웹 소켓 클라이언트 예제

import asyncio
import websockets

async def hello():
    uri = "ws://localhost:8765"
    async with websockets.connect(uri) as websocket:
        await websocket.send("Hello, WebSocket!")
        greeting = await websocket.recv()
        print(f"Received message: {greeting}")

asyncio.get_event_loop().run_until_complete(hello())
반응형