티스토리 뷰
안녕하세요 오늘은 파이썬 라이브러리 중 Socket 이라는 라이브러리를 소개해 드립니다.
socket은 네트워크 통신을 위한 파이썬 표준 라이브러리입니다. 이 라이브러리를 사용하여 클라이언트와 서버 간에 데이터를 주고받을 수 있습니다. 아래에서 socket 라이브러리의 기본 사용법과 몇 가지 예제를 살펴보겠습니다

1. 소켓 생성 및 종류 설정
`socket` 모듈을 임포트합니다.
- 서버나 클라이언트를 생성할 때, 다음과 같이 소켓 종류를 지정합니다
- TCP 서버: `server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- TCP 클라이언트: `client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- UDP 서버: `server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- UDP 클라이언트: `client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
2. 데이터 송수신:
- recv(): 데이터를 수신합니다.
- send(): 데이터를 전송합니다.
# 데이터 수신
data = client_socket.recv(1024)
# 데이터 전송
message = 'Hello, World!'
client_socket.send(message.encode())
3. 에코 서버 예제:
- 에코 서버는 클라이언트가 보낸 데이터를 그대로 돌려주는 서버입니다.
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 8080)
server_socket.bind(server_address)
server_socket.listen(1)
print('서버가 시작되었습니다.')
while True:
client_socket, client_address = server_socket.accept()
print(f'{client_address}에서 접속이 확인되었습니다.')
while True:
data = client_socket.recv(1024)
if not data:
break
client_socket.send(data)
client_socket.close()
server_socket.close()
4. 멀티스레드를 활용한 에코 서버 예제:
- 멀티스레드를 사용하여 여러 클라이언트와 동시에 통신할 수 있는 에코 서버입니다.
import socket
import threading
def handle_client(client_socket, client_address):
print(f'{client_address}에서 접속이 확인되었습니다.')
while True:
data = client_socket.recv(1024)
if not data:
break
client_socket.send(data)
client_socket.close()
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 8080)
server_socket.bind(server_address)
server_socket.listen(5)
print('서버가 시작되었습니다.')
while True:
client_socket, client_address = server_socket.accept()
thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
thread.start()
server_socket.close()
5. HTTP 통신 확인
본 예시는 HTTP 통신 확인 하는 간단한 소스 코드 예시입니다.
import socket
# 서버에 접속하기 위한 소켓 생성
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('example.com', 80)) # example.com의 80번 포트에 접속
# HTTP 요청 전송
request = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"
sock.send(request.encode())
# 서버 응답 받기
response = sock.recv(4096)
print(response.decode())
sock.close()
6.HTTPS 서버를 통신하는 소스코드 예시입니다.
import socket
import ssl
# 서버에 접속하기 위한 소켓 생성
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('example.com', 443)) # example.com의 443번 포트에 접속 (HTTPS)
# SSL 연결 설정
context = ssl.create_default_context()
secure_sock = context.wrap_socket(sock, server_hostname='example.com')
# HTTPS 요청 전송 (예시로 GET 요청)
request = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"
secure_sock.send(request.encode())
# 서버 응답 받기
response = secure_sock.recv(4096)
print(response.decode())
secure_sock.close()
7. 이번에는 syslog를 보내봅시다.
기본적으로 Syslog는 UDP 514로 보내는데요.
import socket
# UDP 소켓 생성
udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 서버 주소와 포트 설정
server_address = ('localhost', 514)
# 메시지 전송
message = "Hello, UDP Server!"
udp_sock.sendto(message.encode(), server_address)
# 서버로부터 응답 받기
data, addr = udp_sock.recvfrom(1024)
print(f"Received from {addr}: {data.decode()}")
udp_sock.close()
8.Socket 라이브러리의 장/단점
- 장점:
- 파이썬 표준 라이브러리이므로 설치가 필요 없고 사용하기 쉽습니다.
- TCP와 UDP를 모두 지원하며 다양한 프로토콜에 대한 통신이 가능합니다.
- 단점:
- 저수준의 인터페이스를 제공하므로 상대적으로 복잡할 수 있습니다.
- 비동기적 통신을 위한 추가 작업이 필요할 수 있습니다.
9.결론:
socket 라이브러리는 파이썬에서 네트워크 통신을 위한 강력한 도구입니다. 예제를 통해 기본적인 사용법을 익히고, 더 다양한 기능을 활용하여 네트워크 프로그래밍에 유용하게 활용해보세요! 😊
[참고 링크]
(1) [Python] 파이썬 socket 라이브러리 사용법 및 예제. https://gr-st-dev.tistory.com/1015.
(2) [파이썬] `socket` 라이브러리 개요. https://bing.com/search?q=socket+%eb%9d%bc%ec%9d%b4%eb%b8%8c%eb%9f%ac%eb%a6%ac+%28%ed%8c%8c%ec%9d%b4%ec%8d%ac%29+%ec%84%a4%eb%aa%85.
(3) [파이썬] `socket` 라이브러리 개요. https://colinch4.github.io/2023-09-06/15-49-39-326076/.
(4) [파이썬] socket 소켓을 통한 바이너리 데이터 전송. https://colinch4.github.io/2023-09-06/16-20-08-421631/.
(5) undefined. https://bing.com/search?q=.
'개발 > python' 카테고리의 다른 글
IT비전문가인 제가 학습한 파이썬 테크트리 에 대해 알아보자 (IT비개발자 집중!!) (1) | 2024.04.15 |
---|---|
[python][라이브러리] Faker 모듈에 대해 알아보자(feat. 자네 가라 데이터가 필요한가?) (2) | 2020.12.11 |
[python] Requests 모듈을 이용하여 https 사이트 접속 에러 발생시 초간단 해결방법 (1) | 2020.05.08 |
- Total
- Today
- Yesterday
- 다이어트100일기록
- 보안엔지니어
- 폭싹속았수다원작
- 방화벽엔지니어
- 넷플리스신작
- 디지털딕톡스실천
- 박보검아이유
- 핸드폰줄이기
- 피부당독소음식
- 파이썬
- 당독소원인
- 폭싹속았수다촬영지
- 폭싹속았수다줄거리
- 핸드폰안보기
- 무쇠가무녀졌다
- tcpdump
- 디지털딕톡스
- 폭싹속았수다등장인물
- 3월헬스시작
- 피부당독소음싣
- 눈뜨자마자핸드폰안보기
- 피부당독소배출
- 제주지기
- drax러닝
- 봄헬스장이용
- python
- 피부당독소자가진단
- IPS
- 피부당독소
- 40대추천넷플릭스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |