Sök…


Anmärkningar

(Mycket) grundläggande Python-klientuttagsexempel

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))


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow