티스토리 뷰

반응형

안녕하세요 오늘은 파이썬 라이브러리 중 Socket 이라는 라이브러리를 소개해 드립니다.

 

socket 네트워크 통신을 위한 파이썬 표준 라이브러리입니다. 라이브러리를 사용하여 클라이언트와 서버 간에 데이터를 주고받을 있습니다. 아래에서 socket 라이브러리의 기본 사용법과 가지 예제를 살펴보겠습니다

 

AI가 생성한 네떡쟁이 근무 환경

 

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=.

 

 

반응형