[파이썬] socket 데이터 보내기

Socket 프로그래밍은 네트워크 통신을 위해 사용되는 중요한 개념입니다. 이번 포스트에서는 Python에서 소켓을 사용하여 데이터를 보내는 방법을 살펴보겠습니다.

서버와 클라이언트 설정

먼저, 서버와 클라이언트 간의 소켓 통신을 설정해야 합니다. 아래는 간단한 예제 코드입니다.

# 서버
import socket

# 호스트와 포트 설정
host = '127.0.0.1'
port = 12345

# 소켓 객체 생성
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 호스트와 포트를 소켓에 연결
s.bind((host, port))

# 클라이언트의 연결을 대기
s.listen(5)

# 클라이언트의 연결을 수락하고 데이터를 받기
while True:
    client_socket, addr = s.accept()
    data = client_socket.recv(1024).decode()
    print('받은 데이터:', data)
    client_socket.close()

# 클라이언트
import socket

# 호스트와 포트 설정
host = '127.0.0.1'
port = 12345

# 소켓 객체 생성
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 서버에 연결
s.connect((host, port))

# 데이터를 보내기
message = '안녕하세요'
s.sendall(message.encode())

# 소켓 닫기
s.close()

소켓으로 데이터 보내기

클라이언트 소켓과 서버 소켓이 설정되면 데이터의 송신과 수신이 가능해집니다. 위의 예제에서 클라이언트는 s.sendall() 메소드를 사용하여 데이터를 서버로 전송하고, 서버는 client_socket.recv() 메소드로 데이터를 받습니다.

소켓은 일반적으로 바이트 스트림 형태로 데이터를 보내고 받습니다. 따라서 데이터를 전송하기 전에 인코딩을 해주어야 합니다. 위의 예제에서는 encode() 메소드로 문자열을 바이트로 변환하고, decode() 메소드로 바이트를 다시 문자열로 변환했습니다.

예외 처리

소켓 프로그래밍에서는 예외 처리를 해주어야 합니다. 소켓 통신 도중에 에러가 발생할 수 있기 때문입니다. 위의 예제에서는 try-except 블록을 사용하여 예외 처리를 구현할 수 있습니다.

try:
    # 데이터 송신
    s.sendall(message.encode())

    # 데이터 수신
    data = client_socket.recv(1024).decode()
    print('받은 데이터:', data)
except socket.error as e:
    print('소켓 에러 발생:', e)

결론

Python의 소켓을 사용하여 데이터를 보내는 방법에 대해 알아보았습니다. 소켓은 네트워크 통신을 위한 강력한 도구로, 이를 잘 활용하면 다양한 클라이언트-서버 애플리케이션을 구축할 수 있습니다. 위의 예제 코드를 참고하여 소켓 통신을 활용해보세요.