[파이썬] 네트워크 연결 유지 관리

In today’s interconnected world, network connectivity is a crucial aspect of any application or system. Whether it’s a web server, a cloud service, or an IoT device, maintaining a stable and reliable network connection is essential for seamless communication.

Fortunately, Python provides a wide range of libraries and tools to help manage network connectivity. In this blog post, we will explore some practical techniques to monitor and maintain network connectivity using Python.

Checking Network Connection Status

Before we can manage network connectivity, we first need to check the current connection status. Python offers several methods to accomplish this:

1. Using the ping command

Python allows us to execute shell commands, which gives us the ability to use system utilities like ping to check for network connectivity. We can utilize the subprocess module to execute the command and capture the output.

import subprocess

def check_network_connection():
    result = subprocess.run(['ping', '-c', '1', 'google.com'], capture_output=True)
    return result.returncode == 0

In the above example, we are using the ping command to send a single ICMP echo request to google.com. If the return code is 0, it means the host is reachable, indicating a network connection.

2. Using the socket module

Another approach is to use the socket module, which offers a more programmatic way to check network connectivity by attempting to establish a connection to a specific host and port.

import socket

def check_network_connection():
    try:
        socket.create_connection(('google.com', 80), timeout=5)
        return True
    except OSError:
        return False

In this example, we attempt to create a TCP connection to google.com on port 80. If the connection is successful within the specified timeout (5 seconds in our case), it indicates network connectivity.

Monitoring Network Connection

Once we have a way to check the network connection status, it’s important to continuously monitor it to detect any changes or disruptions. We can achieve this by periodically running the connection check function and logging the results.

import time

def monitor_network_connection():
    while True:
        is_connected = check_network_connection()
        timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
        log_message = f"{timestamp} - Network is {'connected' if is_connected else 'disconnected'}"
        with open("connection.log", "a") as f:
            f.write(log_message + "\n")
        time.sleep(60)  # Wait for 60 seconds before checking again

In the above code snippet, we create an infinite loop that periodically checks the network connection status, logs the result with a timestamp, and waits for 60 seconds before checking again. The log messages are written to a file called connection.log in append mode.

Reacting to Connection Changes

Knowing the network connection status is useful, but it’s even more important to react to connection changes and take appropriate actions. For example, if the network connection is lost, we can attempt to reconnect or notify the user.

def react_to_connection_change(is_connected):
    if is_connected:
        print("Network connection is back!")
        # Re-establish connection or resume operations
    else:
        print("Network connection lost!")
        # Take necessary actions like disconnecting or showing an error message

In this example, we define a function react_to_connection_change that takes the connection status as a parameter. Based on the status, we can perform specific actions such as re-establishing the connection or displaying an error message to the user.

Conclusion

Managing network connectivity is a crucial aspect of modern applications. With the help of Python, we can easily check the network connection status, monitor it for changes, and react accordingly. By implementing the techniques discussed in this blog post, you can ensure that your application gracefully handles network disruptions and provides a seamless user experience.

Remember, network connectivity can be unpredictable, so it’s important to implement proper error handling and recovery mechanisms in your own projects.