Python Language
Python-Netzwerk
Suche…
Bemerkungen
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))