Python Language
Réseau Python
Recherche…
Remarques
Le plus simple exemple client-serveur de socket Python
Du côté serveur:
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
Côté client:
import socket
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect(('localhost', 8089))
clientsocket.send('hello')
Commencez par exécuter SocketServer.py et assurez-vous que le serveur est prêt à écouter / recevoir sth. Le client envoie alors des informations au serveur. Après que le serveur a reçu sth, il se termine
Création d'un serveur HTTP simple
Pour partager des fichiers ou héberger des sites Web simples (http et javascript) sur votre réseau local, vous pouvez utiliser le module SimpleHTTPServer intégré de Python. Python devrait être dans votre variable Path. Accédez au dossier contenant vos fichiers et tapez:
Pour python 2
:
$ python -m SimpleHTTPServer <portnumber>
Pour python 3
:
$ python3 -m http.server <portnumber>
Si le numéro de port n'est pas indiqué, 8000
est le port par défaut. Donc, le résultat sera:
Servant HTTP sur le port 0.0.0.0 8000 ...
Vous pouvez accéder à vos fichiers via n'importe quel périphérique connecté au réseau local en tapant http://hostipaddress:8000/
.
hostipaddress
est votre adresse IP locale qui commence probablement par 192.168.xx
Pour terminer le module, appuyez simplement sur ctrl+c.
Créer un serveur TCP
Vous pouvez créer un serveur TCP à l'aide de la bibliothèque socketserver
. Voici un serveur d'écho simple.
Du côté serveur
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()
Côté client
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
facilite la création de serveurs TCP simples. Cependant, vous devez savoir que, par défaut, les serveurs sont à thread unique et ne peuvent servir qu’un client à la fois. Si vous souhaitez gérer plusieurs clients, instanciez à la place un ThreadingTCPServer
.
from socketserver import ThreadingTCPServer
...
if __name__ == '__main__':
server = ThreadingTCPServer(('', 5000), EchoHandler)
server.serve_forever()
Création d'un serveur UDP
Un serveur UDP est facilement créé à l'aide de la bibliothèque socketserver
.
un simple serveur de temps:
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()
Essai:
>>> 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))
Démarrez Simple HttpServer dans un thread et ouvrez le navigateur
Utile si votre programme produit des pages Web en cours de route.
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))