Python Language
Python nätverk
Sök…
Anmärkningar
Det enklaste Python-socketklient-serverexemplet
Server sida:
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
Klientsidan:
import socket
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect(('localhost', 8089))
clientsocket.send('hello')
Kör först SocketServer.py och se till att servern är redo att lyssna / ta emot sth. Sedan skickar klienten information till servern; Efter att servern mottagit sth avslutas den
Skapa en enkel Http-server
För att dela filer eller att vara värd för enkla webbplatser (http och javascript) i ditt lokala nätverk kan du använda Pythons inbyggda SimpleHTTPServer-modul. Python bör vara i din sökvägsvariabel. Gå till mappen där dina filer är och skriv:
För python 2
:
$ python -m SimpleHTTPServer <portnumber>
För python 3
:
$ python3 -m http.server <portnumber>
Om portnumret inte anges är 8000
standardporten. Så utgången blir:
Serverar HTTP på 0.0.0.0 port 8000 ...
Du kan komma åt dina filer via vilken enhet som är ansluten till det lokala nätverket genom att skriva http://hostipaddress:8000/
.
hostipaddress
är din lokala ip-adress som antagligen börjar med 192.168.xx
För att avsluta modulen, tryck bara på ctrl+c.
Skapa en TCP-server
Du kan skapa en TCP-server med socketserver
biblioteket. Här är en enkel ekoserver.
Server sida
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()
Klientsidan
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
gör det relativt enkelt att skapa enkla TCP-servrar. Du bör dock vara medveten om att servrarna som standard är entrådiga och bara kan betjäna en klient åt gången. Om du vill hantera flera klienter, antingen instansera en ThreadingTCPServer
istället.
from socketserver import ThreadingTCPServer
...
if __name__ == '__main__':
server = ThreadingTCPServer(('', 5000), EchoHandler)
server.serve_forever()
Skapa en UDP-server
En UDP-server skapas enkelt med socketserver
biblioteket.
en enkel tidsserver:
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()
Testning:
>>> 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))
Starta Simple HttpServer i en tråd och öppna webbläsaren
Användbart om ditt program skickar ut webbsidor på vägen.
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))