Latest web development tutorials

Python Network Programming

Python bietet zwei Ebenen von Zugriffsnetzwerkdienste. :

  • Low-Level-Netzwerk-Dienste Grund Sockel zu unterstützen, es bietet eine Standard-BSD Sockets API können Sie alle Methoden des zugrunde liegenden Betriebssystem-Socket-Schnittstelle zugreifen.
  • Ein hohes Maß an Netzwerk-Servicemodul Socket, eine zentrale Server-Klasse bietet, können Sie die Entwicklung des Netzwerk-Servers zu vereinfachen.

Was ist Sockel?

Buchse auch als "Buchse" bekannt ist, wird die Anwendung in der Regel durch eine "Steckdose" an das Netzwerk Anfrage oder Antwort Netzwerk-Anforderung ausgegeben, so dass der Prozess zwischen Hosts oder zwischen einem Computer kommunizieren kann.


socket () Funktion

Python, wir die Funktion socket () verwenden, um eine Buchse zu schaffen, ist Syntax wie folgt:

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

Parameter

  • Familie: Die Familie kann eine Buchse machen oder AF_INET AF_UNIX
  • Typ: Socket - Typ kann verbindungsorientiert oder verbindungslos in sein SOCK_STREAM oder SOCK_DGRAM
  • Protokoll: Im allgemeinen nicht standardmäßig auf Null zu füllen.

Socket-Objekt (eingebaut) Verfahren

Funktion Beschreibung
Server-Buchse
s.bind () Bind-Adresse (Host, Port) an die Buchse an AF_INET, in Form eines Tupels (Host, Port) gibt die Adresse.
s.listen () Starten Sie TCP hören. backlog angegeben, bevor die Verbindung ablehnt, kann das Betriebssystem die maximale Anzahl von Verbindungen einzustellen. Dieser Wert ist mindestens 1 ist, können die meisten Anwendungen auf 5 gesetzt werden.
s.accept () Passive Akzeptanz von TCP-Client-Verbindungen (Blockierung) warten auf die Ankunft von
Client-Socket
s.connect () Aktive initialisieren TCP-Server-Verbindungen. Hauptadresse des Formats von Tupeln (Hostname, Port), wenn der Verbindungsfehler, wird ein Fehler zurückgegeben socket.error.
s.connect_ex () connect () erweiterte Version der Funktion einen Fehlercode zurück, wenn ein Fehler stattdessen eine Ausnahme zu werfen
Socket-Funktionen öffentliche Zwecke
s.recv () Erhalten Sie TCP-Daten, werden die Daten als String zurückgegeben, geben Sie die maximale Menge an Daten empfangen bufsize werden. Geben Sie können zusätzliche Informationen über die Nachricht Flagge in der Regel ignoriert.
s.send () Senden TCP-Daten, sendet die Datenkette an die Socket-Verbindung. Der Rückgabewert ist die Anzahl der Bytes, diese Zahl zu senden, kleiner sein kann als die Folge von Bytes.
s.sendall () Vollständige Senden TCP-Daten, komplett Sende TCP-Daten. Es sendet die Datenkette zu der Socket-Verbindung, aber vor der Rückkehr wird versuchen, all die Daten zu senden. Erfolgreiche Rückkehr Keine, wird Versagen Ausnahme ausgelöst.
s.recvform () UDP-Daten empfangen () ist ähnlich wie recv, aber der Rückgabewert (Daten, Adresse). Wobei die Daten eine Zeichenfolge ist, die empfangenen Daten enthält, Adressdaten Socket-Adresse gesendet.
s.sendto () Senden UDP-Daten senden, Daten an einen Socket, ist Adresse in Form von (ipaddr, port) Tupel angegeben Remote-Adresse. Der Rückgabewert ist die Anzahl der gesendeten Bytes.
S.CLOSE () Schließen Sie die Buchse
s.getpeername () Gibt die Anschlussbuchse Remote-Adresse. Der Rückgabewert ist in der Regel ein Tupel (ipaddr, port).
s.getsockname () Gibt die eigene Adresse des Sockets. Normalerweise wird ein Tupel (ipaddr, port)
s.setsockopt (Pegel, optname, value) Setzen Sie den Wert eines gegebenen Socket-Option.
s.getsockopt (Pegel, optname [.buflen]) Der Rückgabewert der Socket-Option.
s.settimeout (Timeout) Set Betrieb an Timeout-Zeit, Timeout ist eine Fließkommazahl in Sekunden. Keine Wert gibt keine Zeitüberschreitung. Im allgemeinen Zeitlimit sollte nur einen Socket Set zu erstellen, weil sie verwendet werden können, um die Verbindung (wie zB connect ()) zu betreiben
s.gettimeout () Gibt den Wert des aktuellen Zeitlimit in Sekunden an, wenn es keine festgelegte Zeitlimit ist, gibt keine.
s.fileno () Gibt eine Socket-Datei-Descriptor.
s.setblocking (Flag) Wenn das Flag 0 ist, wird der Sockel nicht blockierend Modus, da sonst die Buchse zu blockierenden Modus (Standardwert) gesetzt. Modus Non-Blocking, wenn Sie recv () aufrufen, haben keine Daten zu finden, oder () Aufruf senden kann nicht sofort Daten zu senden, wäre es socket.error Ausnahme verursachen.
s.makefile () Erstellen Sie eine relevante Dokumente im Zusammenhang mit dem Sockel

Einfaches Beispiel

Der Server

Wir verwenden die BuchsenmodulSocket - Funktion ein Socket - Objekt zu erstellen.Socket-Objekt kann andere Funktionen aufrufen einen Socket-Dienst einrichten.

Jetzt können wir die Dienste angeben durch den Aufruf vonbind (Host - Name, Port)FunktionPort (Port).

Als nächstes rufen wir die Methode der Socket - Objekte übernehmen.Das Verfahren wartet auf die Client - Verbindung undVerbindungsobjektzurück , die mit dem Client verbunden darstellt.

Der vollständige Code ist wie folgt:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:server.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口
s.bind((host, port))        # 绑定端口

s.listen(5)                 # 等待客户端连接
while True:
    c, addr = s.accept()     # 建立客户端连接。
    print '连接地址:', addr
    c.send('欢迎访问本教程!')
    c.close()                # 关闭连接

Auftraggeber

Weiter schreiben wir einen einfachen Client an den Service-Instanzen oben erstellt zu verbinden. Portnummer ist 12345.

Socket.connect (hosname, Port) Methode öffnet eine TCP - Verbindung mit dem Host für denHostnamenPort zuPort- Service - Provider.Einmal verbunden, können vom Server-Daten veröffentlichen können, denken Sie daran, nach der Beendigung der Operation müssen die Verbindung zu schließen.

Der vollständige Code ist wie folgt:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:client.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口好

s.connect((host, port))
print s.recv(1024)
s.close()  

Nun müssen wir auch das Terminal zu öffnen, wobei der erste Anschluss führt server.py Datei:

$ python server.py

Der zweite Anschluss führt client.py Datei:

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

Dies ist unser erstes und dann ein Terminal öffnen, sehen Sie die folgenden Informationen ausgegeben:

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

Python Internet-Module

Hier sind einige wichtige Modul Python Netzwerk-Programmierung:

Vereinbarung Nützliche Funktion Port-Nummer Python-Module
HTTP Web-Zugang 80 httplib, urllib, xmlrpclib
NNTP Lesen und Senden News-Artikel, bekannt als der "post" 119 nntplib
FTP File Transfer 20 ftplib, urllib
SMTP E-Mail senden 25 smtplib
POP3 Empfangen von Mail 110 poplib
IMAP4 Mail lesen 143 imaplib
Telnet Command Line 23 telnetlib
Ziesel Machen Sie 70 gopherlib, urllib

Weitere Details finden Sie in der offiziellen Website von zu finden der Python die Socket - Bibliothek und die Module .