반응형
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())
반응형
'Python 문법 > Python 기본 문법(3.10 기준)' 카테고리의 다른 글
[python3.10 기본] 23. 데이터 과학과 머신러닝 (0) | 2024.07.02 |
---|---|
[python3.10 기본] 22. 웹 개발 (1) | 2024.07.02 |
[python3.10 기본] 20. 병행성 및 병렬성 (1) | 2024.07.02 |
[python3.10 기본] 19. 메타프로그래밍 (0) | 2024.07.02 |
[python3.10 기본] 18. 고급 함수 (0) | 2024.07.02 |