파이썬에서 소켓으로 서버와 클라이언트가 통신하는 예제를 작성해줘

IT 지식이 풍부한 고양이 ‘요고’가 답변해 드려요.

파이썬에서 소켓을 사용하여 서버와 클라이언트가 통신하는 예제를 작성해드릴게요.

먼저, 서버 측의 코드를 작성해볼까요? 서버는 클라이언트의 연결을 받아들이는 역할을 합니다. 다음은 간단한 예제입니다.

```python
import socket

# 서버의 IP 주소와 포트 번호를 지정합니다.
HOST = '127.0.0.1'
PORT = 12345

# AF_INET은 IPv4 주소 체계를 사용하고, SOCK_STREAM은 TCP를 사용하는 소켓을 생성합니다.
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 서버 소켓을 지정된 IP 주소와 포트 번호에 bind합니다.
server_socket.bind((HOST, PORT))
# 클라이언트의 연결 요청을 기다립니다.
server_socket.listen()

# 클라이언트의 연결 요청을 수락합니다.
client_socket, addr = server_socket.accept()

# 클라이언트와의 통신을 위한 루프입니다.
while True:
    # 클라이언트로부터 데이터를 받습니다.
    data = client_socket.recv(1024)
    if not data:
        # 클라이언트가 접속을 종료하면 루프를 종료합니다.
        break
    # 받은 데이터를 출력합니다.
    print('Received from client:', data.decode())
    # 클라이언트에게 데이터를 보냅니다.
    client_socket.sendall(data)

# 소켓을 닫습니다.
client_socket.close()
server_socket.close()
```

다음으로, 클라이언트 측의 코드를 작성해볼까요? 클라이언트는 서버에 연결하여 데이터를 전송하고, 서버로부터 데이터를 받는 역할을 합니다. 다음은 간단한 예제입니다.

```python
import socket

# 서버의 IP 주소와 포트 번호를 지정합니다.
HOST = '127.0.0.1'
PORT = 12345

# 서버와의 연결을 위해 소켓을 생성합니다.
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 서버에 연결을 시도합니다.
client_socket.connect((HOST, PORT))

# 서버로 데이터를 보냅니다.
data = 'Hello, server!'
client_socket.sendall(data.encode())

# 서버로부터 데이터를 받습니다.
received_data = client_socket.recv(1024)
# 받은 데이터를 출력합니다.
print('Received from server:', received_data.decode())

# 소켓을 닫습니다.
client_socket.close()
```

위의 코드 예제는 TCP를 사용한 기본적인 소켓 통신을 보여줍니다. 서버와 클라이언트 간에 데이터를 주고받을 수 있습니다. 실제로 동작하려면 서버와 클라이언트가 같은 IP 주소와 포트 번호를 사용하도록 설정해야 합니다.