Suche…


Bemerkungen

(Sehr) einfaches Beispiel für Python-Client-Sockets

Das einfachste Python-Socket-Client-Server-Beispiel

Serverseite:

import socket

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('localhost', 8089))
serversocket.listen(5) # become a server socket, maximum 5 connections

while True:
    connection, address = serversocket.accept()
    buf = connection.recv(64)
    if len(buf) > 0:
        print(buf)
    break

Kundenseite:

import socket

clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect(('localhost', 8089))
clientsocket.send('hello')

Führen Sie zuerst SocketServer.py aus und stellen Sie sicher, dass der Server zum Abhören / Empfangen von sth bereit ist. Dann sendet der Client Informationen an den Server. Nachdem der Server etw erhalten hat, wird er beendet

Einen einfachen HTTP-Server erstellen

Um Dateien gemeinsam zu nutzen oder einfache Websites (http und Javascript) in Ihrem lokalen Netzwerk zu hosten, können Sie das integrierte SimpleHTTPServer-Modul von Python verwenden. Python sollte in Ihrer Path-Variable stehen. Wechseln Sie in den Ordner, in dem sich Ihre Dateien befinden, und geben Sie Folgendes ein:

Für python 2 :

$ python -m SimpleHTTPServer <portnumber>

Für python 3 :

$ python3 -m http.server <portnumber>

Wenn keine Portnummer angegeben ist, ist 8000 der Standardport. Die Ausgabe wird also sein:

HTTP wird auf 0.0.0.0 Port 8000 bereitgestellt ...

Sie können über jedes mit dem lokalen Netzwerk verbundene Gerät auf Ihre Dateien zugreifen, indem Sie http://hostipaddress:8000/ .

hostipaddress ist Ihre lokale IP-Adresse, die wahrscheinlich mit 192.168.xx beginnt.

Um das Modul zu beenden, drücken ctrl+c. einfach ctrl+c.

TCP-Server erstellen

Sie können einen TCP-Server mithilfe der socketserver Bibliothek socketserver . Hier ist ein einfacher Echoserver.

Serverseite

from sockerserver import BaseRequestHandler, TCPServer

class EchoHandler(BaseRequestHandler):
    def handle(self):
        print('connection from:', self.client_address)
        while True:
            msg = self.request.recv(8192)
            if not msg:
                break
            self.request.send(msg)

if __name__ == '__main__':
    server = TCPServer(('', 5000), EchoHandler)
    server.serve_forever()

Client-Seite

from socket import socket, AF_INET, SOCK_STREAM
sock = socket(AF_INET, SOCK_STREAM)
sock.connect(('localhost', 5000))
sock.send(b'Monty Python')
sock.recv(8192)  # returns b'Monty Python'

socketserver können relativ einfach einfache TCP-Server erstellt werden. Sie sollten sich jedoch bewusst sein, dass die Server standardmäßig einen einzelnen Thread haben und jeweils nur einen Client bedienen können. Wenn Sie mit mehreren Clients arbeiten möchten, instanziieren Sie stattdessen einen ThreadingTCPServer .

from socketserver import ThreadingTCPServer
...
if __name__ == '__main__':
    server = ThreadingTCPServer(('', 5000), EchoHandler)
    server.serve_forever()

Erstellen eines UDP-Servers

Ein UDP-Server kann einfach mit der socketserver Bibliothek erstellt werden.

ein einfacher Zeitserver:

import time
from socketserver import BaseRequestHandler, UDPServer

class CtimeHandler(BaseRequestHandler):
    def handle(self):
    print('connection from: ', self.client_address)
    # Get message and client socket
    msg, sock = self.request
    resp = time.ctime()
    sock.sendto(resp.encode('ascii'), self.client_address)

if __name__ == '__main__':
    server = UDPServer(('', 5000), CtimeHandler)
    server.serve_forever()

Testen:

>>> from socket import socket, AF_INET, SOCK_DGRAM
>>> sock = socket(AF_INET, SOCK_DGRAM)
>>> sick.sendto(b'', ('localhost', 5000))
0
>>> sock.recvfrom(8192)
(b'Wed Aug 15 20:35:08 2012', ('127.0.0.1', 5000))

Starten Sie Simple HttpServer in einem Thread und öffnen Sie den Browser

Nützlich, wenn Ihr Programm unterwegs Webseiten ausgibt.

from http.server import HTTPServer, CGIHTTPRequestHandler
import webbrowser
import threading

def start_server(path, port=8000):
    '''Start a simple webserver serving path on port'''
    os.chdir(path)
    httpd = HTTPServer(('', port), CGIHTTPRequestHandler)
    httpd.serve_forever()

# Start the server in a new thread
port = 8000
daemon = threading.Thread(name='daemon_server',
                          target=start_server,
                          args=('.', port)
daemon.setDaemon(True) # Set as a daemon so it will be killed once the main thread is dead.
daemon.start()

# Open the web browser 
webbrowser.open('http://localhost:{}'.format(port))


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow