Latest web development tutorials

programmazione di rete python3

Python offre due livelli di servizi di rete di accesso. :

  • servizi di rete a basso livello a supporto dello zoccolo di base, si fornisce uno standard BSD Sockets API, è possibile accedere a tutti i metodi dell'interfaccia Socket sistema operativo sottostante.
  • Un elevato livello di modulo di servizio di rete SocketServer, si fornisce una classe server centrale, è possibile semplificare lo sviluppo di server di rete.

Che cosa è presa?

Socket noto anche come "presa", l'applicazione viene emesso solitamente da una "presa" alla richiesta richiesta di rete o rete di risposta, in modo che il processo tra host o tra un computer su può comunicare.


Presa function ()

Python, usiamo la funzione socket () per creare un socket, la sintassi è la seguente:

socket.socket([family[, type[, proto]]])

parametri

  • famiglia: la famiglia può fare una presa di corrente o AF_INET AF_UNIX
  • Tipo: tipo di presa può essere orientato alla connessione o senza connessione in SOCK_STREAM o SOCK_DGRAM
  • Protocollo: Generalmente non riempire il default è zero.

metodo oggetto Socket (built-in)

funzione descrizione
presa Server
s.bind () indirizzo Bind (host, port) alla presa a AF_INET, sotto forma di una tupla (host, port) indica l'indirizzo.
s.listen () Avviare TCP in ascolto. backlog specificato prima di respingere la connessione, il sistema operativo può sospendere il numero massimo di connessioni. Questo valore è almeno 1, la maggior parte delle applicazioni possono essere impostati a 5.
s.accept () passiva accettazione di connessioni client TCP (blocco) in attesa per l'arrivo di
socket client
s.connect () Attivo inizializzare le connessioni del server TCP. Indirizzo generale del formato di tuple (nome host, port), se l'errore di connessione, viene restituito un errore socket.error.
s.connect_ex () connect () versione estesa della funzione restituisce un codice di errore quando un errore invece di lanciare un'eccezione
funzioni Socket finalità pubbliche
s.recv () Ricezione di dati TCP, i dati vengono restituiti sotto forma di stringa, specificare la quantità massima di dati da ricevere bufsize. Fornire ulteriori informazioni sulla bandiera messaggio di solito può essere ignorato.
s.send () Invia i dati TCP, invia la stringa di dati per la connessione socket. Il valore restituito è il numero di byte da inviare, questo numero può essere inferiore alla stringa di byte.
s.sendall () dati TCP invio completi, i dati completi di trasmissione TCP. Si invia la stringa di dati per la connessione socket, ma prima di tornare cercherà di inviare tutti i dati. ritorno di successo Nessuno, tranne il fallimento è gettato.
s.recvform () Ricezione di dati UDP () è simile a recv, ma il valore di ritorno è (dati, indirizzo). In cui i dati sono una stringa contenente i dati ricevuti, i dati vengono inviati indirizzo indirizzo presa.
s.sendto () Invia i dati UDP, inviare dati ad un socket, indirizzo è nella forma di (ipaddr, porto) tupla specificata indirizzo remoto. Il valore di ritorno è il numero di byte inviati.
s.close () Chiudere la presa
s.getpeername () Restituisce l'indirizzo remoto presa di collegamento. Il valore di ritorno è di solito una tupla (ipaddr, porto).
s.getsockname () Restituisce indirizzo del socket. Di solito una tupla (ipaddr, porto)
s.setsockopt (livello, optname, valore) Impostare il valore di una data opzione socket.
s.getsockopt (livello, optname [.buflen]) Il valore di ritorno della opzione socket.
s.settimeout (timeout) Set operazione presa periodo di timeout, il timeout è un numero a virgola mobile, in pochi secondi. Nessuno valore indica nessun periodo di timeout. Generalmente, periodo di time-out deve solo creare un set di presa, in quanto essi possono essere utilizzati per operare il collegamento (ad esempio connect ())
s.gettimeout () Restituisce il valore della corrente periodo di timeout, in secondi, se non vi è alcun periodo di timeout impostato, restituisce None.
s.fileno () Restituisce un descrittore di file di socket.
s.setblocking (bandiera) Se il flag è 0, il socket è impostato sulla modalità non bloccante, altrimenti la presa di modalità di blocco (il valore predefinito). modalità non bloccante, se si chiama recv () non ha trovato alcun dato, o inviare) chiamata (non è possibile inviare immediatamente i dati, causerebbe socket.error eccezione.
s.makefile () Creare un documenti pertinenti in relazione con la presa

esempio semplice

il server

Usiamo la funzione dipresa modulo socket per creare un oggetto socket.oggetto socket può chiamare altre funzioni di istituire un servizio di presa.

Ora siamo in grado di specificare i servizi chiamandoleganoportala funzione (nome host, port)(porta).

Successivamente, si chiama il metodo accettaredi oggetti socket. Il metodo attende per la connessione client e ritorno oggettoconnessioneche rappresenta collegato al client.

Il codice completo è il seguente:

#!/usr/bin/python3
# 文件名:server.py

# 导入 socket、sys 模块
import socket
import sys

# 创建 socket 对象
serversocket = socket.socket(
            socket.AF_INET, socket.SOCK_STREAM) 

# 获取本地主机名
host = socket.gethostname()

port = 9999

# 绑定端口
serversocket.bind((host, port))

# 设置最大连接数,超过后排队
serversocket.listen(5)

while True:
    # 建立客户端连接
    clientsocket,addr = serversocket.accept()      

    print("连接地址: %s" % str(addr))
    
    msg='欢迎访问本教程!'+ "\r\n"
    clientsocket.send(msg.encode('utf-8'))
    clientsocket.close()

cliente

Successivo scriviamo un semplice client di connettersi alle istanze di servizio creato in precedenza. Numero di porta è 12345.

Socket.connect (hosname, porto) metodo apre una connessione TCP con l'host per la portahostper fornitori di servizi portuali.Una volta connessi siamo in grado di inviare dei dati dal server, ricordare, dopo il completamento dell'operazione ha bisogno di chiudere la connessione.

Il codice completo è il seguente:

#!/usr/bin/python3
# 文件名:client.py

# 导入 socket、sys 模块
import socket
import sys

# 创建 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

# 获取本地主机名
host = socket.gethostname() 

# 设置端口好
port = 9999

# 连接服务,指定主机和端口
s.connect((host, port))

# 接收小于 1024 字节的数据
msg = s.recv(1024)

s.close()

print (msg.decode('utf-8'))

Ora abbiamo anche per aprire il terminale, il primo terminale esegue il file server.py:

$ python3 server.py

Il secondo terminale esegue il file client.py:

$ python3 client.py 
欢迎访问本教程!

Questo è il nostro primo e quindi aprire un terminale, si vedrà le seguenti informazioni sono uscita:

连接地址: ('192.168.0.118', 33397)

I moduli di Internet Python

Qui ci sono alcuni importanti programmazione di rete Python modulo:

accordo funzione utile Numero porta I moduli Python
HTTP accesso al Web 80 httplib, urllib, xmlrpclib
NNTP La lettura e la pubblicazione di articoli di notizie, noto come il "post" 119 nntplib
FTP File Transfer 20 ftplib, urllib
SMTP Invia e-mail 25 smtplib
POP3 ricevere la posta 110 poplib
IMAP4 Ricevi posta 143 imaplib
Telnet Command Line 23 telnetlib
citello Trova informazioni 70 gopherlib, urllib

Maggiori dettagli possono essere trovati nel sito ufficiale di Python Library Socket e dei moduli .