[파이썬] socket 소켓 프로그래밍 패턴

Socket programming is a fundamental concept in network programming that allows communication between different devices over a network. In Python, the socket module provides a convenient way to implement socket programming.

In this blog post, we will explore different socket programming patterns in Python and understand how they can be used effectively.

1. Client-Server Model

One of the most common socket programming patterns is the client-server model. In this model, one device acts as a server, listening for incoming connections, while other devices act as clients, initiating connections to the server.

Here is an example of a simple socket server using the client-server model:

import socket

# Create a socket object
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Bind the socket to a specific address and port
server_socket.bind(('localhost', 5000))

# Listen for incoming connections
server_socket.listen(1)

# Accept a client connection
client_socket, client_address = server_socket.accept()

# Receive data from the client
data = client_socket.recv(1024).decode()

# Process the data
processed_data = data.upper()

# Send the processed data back to the client
client_socket.send(processed_data.encode())

# Close the client socket
client_socket.close()

# Close the server socket
server_socket.close()

In this example, the server creates a socket object using socket.socket(), binds it to a specific address and port, and listens for incoming connections using server_socket.listen(). Once a client connects, the server accepts the connection using server_socket.accept() and then receives data from the client and processes it. Finally, the processed data is sent back to the client using client_socket.send().

2. Peer-to-Peer Model

Another socket programming pattern is the peer-to-peer model, where multiple devices act as both clients and servers, establishing a connection between themselves. It allows direct communication between devices without the need for a central server.

Here is an example of a simple peer-to-peer socket implementation:

import socket
import threading

# Create a socket object
peer_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Bind the socket to a specific address and port
peer_socket.bind(('localhost', 5000))

# Connect to another peer
peer_socket.connect(('localhost', 6000))

# Send data to the other peer
peer_socket.send('Hello from Peer 1'.encode())

# Receive data from the other peer
data = peer_socket.recv(1024).decode()

# Process the data
processed_data = data.upper()

# Send the processed data back to the other peer
peer_socket.send(processed_data.encode())

# Close the peer socket
peer_socket.close()

In this example, Peer 1 creates a socket object, binds it to a specific address and port, and then connects to Peer 2 using peer_socket.connect(). Once the connection is established, both peers can send and receive data from each other using peer_socket.send() and peer_socket.recv().

Conclusion

Socket programming in Python provides a flexible and powerful way to implement network communication between devices. Whether you are building a client-server application or a peer-to-peer network, understanding and utilizing the different socket programming patterns can greatly enhance the functionality of your applications.