>  기사  >  백엔드 개발  >  Python을 사용하여 장치를 간단한 서버로 전환하는 방법

Python을 사용하여 장치를 간단한 서버로 전환하는 방법

DDD
DDD원래의
2024-09-23 18:15:32339검색

How to Turn Your Device Into a Simple Server Using Python.

작가: 트릭스 사이러스

당신의 기기에서 호스팅되는 Python 서버를 만들어 보겠습니다.

시작하기..

server라는 디렉터리를 만듭니다

mkdir server

server.py라는 파일을 만드세요

nano server.py

아래 코드를 붙여넣으세요.

import http.server
import socketserver
import logging
import os
import threading
from urllib.parse import urlparse, parse_qs

PORT = 8080
DIRECTORY = "www"  

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')

class MyHandler(http.server.SimpleHTTPRequestHandler):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, directory=DIRECTORY, **kwargs)

    def log_message(self, format, *args):
        logging.info("%s - %s" % (self.client_address[0], format % args))

    def do_GET(self):
        parsed_path = urlparse(self.path)
        query = parse_qs(parsed_path.query)

        # Custom logic for different routes
        if parsed_path.path == '/':
            self.serve_file("index.html")
        elif parsed_path.path == '/about':
            self.respond_with_text("<h1>About Us</h1><p>This is a custom Python server.</p>")
        elif parsed_path.path == '/greet':
            name = query.get('name', ['stranger'])[0]
            self.respond_with_text(f"<h1>Hello, {name}!</h1>")
        else:
            self.send_error(404, "File Not Found")

    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)
        logging.info("Received POST data: %s", post_data.decode('utf-8'))
        self.respond_with_text("<h1>POST request received</h1>")

    def serve_file(self, filename):
        if os.path.exists(os.path.join(DIRECTORY, filename)):
            self.send_response(200)
            self.send_header("Content-type", "text/html")
            self.end_headers()
            with open(os.path.join(DIRECTORY, filename), 'rb') as file:
                self.wfile.write(file.read())
        else:
            self.send_error(404, "File Not Found")

    def respond_with_text(self, content):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        self.wfile.write(content.encode('utf-8'))

class ThreadedHTTPServer(socketserver.ThreadingMixIn, http.server.HTTPServer):
    daemon_threads = True  # Handle requests in separate threads

def run_server():
    try:
        with ThreadedHTTPServer(("", PORT), MyHandler) as httpd:
            logging.info(f"Serving HTTP on port {PORT}")
            logging.info(f"Serving files from directory: {DIRECTORY}")
            httpd.serve_forever()
    except Exception as e:
        logging.error(f"Error starting server: {e}")
    except KeyboardInterrupt:
        logging.info("Server stopped by user")

if __name__ == "__main__":
    server_thread = threading.Thread(target=run_server)
    server_thread.start()

    server_thread.join()

www라는 디렉터리를 만듭니다

mkdir www

이제 www 디렉토리로 이동하세요

cd www

index.html이라는 파일을 만듭니다

nano index.html

아래 코드를 붙여넣으세요

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Python Simple Server</title>
</head>
<body>
    <h1>Welcome to My Python Server!</h1>
    <p>This is a simple web server running on your local device.</p>
</body>
</html>

2단계: 경로 테스트

수정된 스크립트를 실행한 후 다음으로 이동하세요.

홈페이지를 보려면 http://localhost:8080/
http://localhost:8080/about 정보 페이지를 확인하세요.
http://localhost:8080/greet?name=트릭스
다른 경로의 경우 서버는 404 오류를 반환합니다.

아래는 디렉토리 구조입니다

server/
├── server.py
└── www/
    └── index.html

원격기기에서 서버 실행

동일한 네트워크에 있는 다른 장치에서 Python 서버에 액세스하려면 어떻게 해야 합니까? 서버를 실행하는 머신의 로컬 IP 주소를 찾아 localhost 대신 사용하면 쉽게 할 수 있습니다.

1단계: IP 주소 찾기

다음과 같은 명령을 사용하세요

ipconfig
ifconfig

IPv4 주소(예: 192.168.x.x)를 찾으세요.

2단계. 서버 스크립트 수정

서버 스크립트에서 서버가 시작되는 줄을 다음과 같이 바꾸세요.

with ThreadedHTTPServer(("", PORT), MyHandler) as httpd:

다음으로 변경:

with ThreadedHTTPServer(("0.0.0.0", PORT), MyHandler) as httpd:

3단계: 다른 장치에서 서버에 액세스

이제 앞서 찾은 IP 주소를 사용하여 브라우저에서 http://:8080

으로 이동하여 동일한 네트워크에 있는 모든 장치에서 서버에 액세스할 수 있습니다.

그리고 모든 설정

~트릭스섹

위 내용은 Python을 사용하여 장치를 간단한 서버로 전환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.