Latest web development tutorials

Programmation Python Réseau

Python offre deux niveaux de services de réseau d'accès. :

  • services de réseau de bas niveau pour soutenir Socket de base, il fournit une API BSD Sockets standard, vous pouvez accéder à toutes les méthodes de l'interface Socket du système d'exploitation sous-jacent.
  • Un haut niveau de module de service de réseau SocketServer, il fournit une classe de serveur central, vous pouvez simplifier le développement du serveur de réseau.

Qu'est-ce Socket?

Socket également connu sous le nom "socket", la demande est généralement délivré par un "socket" à la demande de demande de réseau ou d'un réseau de réponse, de sorte que le processus entre les hôtes ou entre un ordinateur peut communiquer.


fonction socket ()

Python, nous utilisons la fonction socket () pour créer une socket, la syntaxe est la suivante:

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

Paramètres

  • famille: la famille peut faire une prise ou AF_INET AF_UNIX
  • Type: Type de socket peut être orienté connexion ou sans connexion en SOCK_STREAM ou SOCK_DGRAM
  • Protocole: Généralement pas remplir les valeurs par défaut à zéro.

objet Socket méthode (built-in)

fonction description
socket serveur
s.bind () Adresse Bind (hôte, port) à la prise à AF_INET, sous la forme d'un tuple (hôte, port) indique l'adresse.
s.listen () Commencez l'écoute TCP. retard spécifié avant de rejeter la connexion, le système d'exploitation peut suspendre le nombre maximum de connexions. Cette valeur est d'au moins 1, dans la plupart des applications peuvent être réglées à 5.
s.accept () L'acceptation passive des connexions client TCP (blocage) en attendant l'arrivée de
socket client
s.connect () Actif initialiser les connexions du serveur TCP. Adresse générale du format de tuples (nom d'hôte, port), si l'erreur de connexion, une erreur est renvoyée socket.error.
s.connect_ex () connect () version étendue de la fonction renvoie un code d'erreur en cas d'erreur au lieu de lancer une exception
Fonctions Socket des fins publiques
s.recv () Recevoir des données TCP, les données sont renvoyées sous forme de chaîne, la quantité maximale de données à recevoir bufsize. Fournir des informations supplémentaires sur le message drapeau peut généralement être ignorée.
s.send () Envoyer des données TCP, envoie la chaîne de données à la connexion de socket. La valeur de retour est le nombre d'octets à envoyer, ce nombre peut être inférieur à la chaîne d'octets.
s.sendall () Envoi complet des données TCP, les données complètes de transmission TCP. Il envoie la chaîne de données à la connexion de socket, mais avant de retourner va essayer d'envoyer toutes les données. Succès retour Aucun, l'échec exception est levée.
s.recvform () Réception de données UDP () est similaire à recv, mais la valeur de retour est (données, adresse). Dans lequel les données est une chaîne contenant les données reçues, les données d'adresse est envoyé à l'adresse de socket.
s.sendto () Envoyer des données UDP, envoyer des données à un socket, l'adresse est sous la forme de (ipaddr, port) tuple spécifié adresse distante. La valeur de retour est le nombre d'octets envoyés.
s.close () Fermez la prise
s.getpeername () Renvoie la prise de connexion adresse distante. La valeur de retour est généralement un tuple (ipaddr, port).
s.getsockname () Retourne l'adresse propre de la prise. Habituellement, un tuple (ipaddr, port)
s.setsockopt (niveau, optname, valeur) Réglez la valeur d'une option de socket donnée.
s.getsockopt (niveau, optname [.buflen]) La valeur de retour de l'option de socket.
s.settimeout (timeout) Set délai d'attente d'opération de socket, délai d'attente est un nombre à virgule flottante, en secondes. Aucune valeur indique pas de période de temporisation. En général, la période de temporisation doit simplement créer un jeu de douilles, car ils peuvent être utilisés pour faire fonctionner la connexion (comme connect ())
s.gettimeout () Renvoie la valeur de la période de temporisation en cours, en quelques secondes, s'il n'y a pas de jeu période-out, retourne None.
s.fileno () Renvoie un descripteur de fichier socket.
s.setblocking (drapeau) Si le drapeau est 0, la prise est réglé en mode non-blocage, sinon la prise en mode bloquant (la valeur par défaut). Le mode non-bloquant, si vous appelez recv () n'a pas trouvé de données ou envoyer (appel) ne peut pas envoyer immédiatement les données, cela causerait socket.error exception.
s.makefile () Créez des documents pertinents dans le cadre de la prise

exemple simple

le serveur

Nous utilisons la fonctionde support du module de prise pour créer un objet socket.objet socket peut appeler d'autres fonctions à mettre en place un service de prise.

Maintenant , nous pouvons préciser les services en appelantbind (nom d' hôte, port)Portde fonction(port).

Ensuite, nous appelons la méthode accepterdes objets socket. La méthode attend la connexion du client et de retour objetde connexionqui représente connecté au client.

Le code complet est le suivant:

#!/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()                # 关闭连接

client

Ensuite, nous écrivons un simple client de se connecter aux instances de service créé ci-dessus. Le numéro de port est 12345.

Socket.connect (hosname, port) méthode ouvre une connexion TCP à l'hôte pour le portde nomd'hôtepour les fournisseurs de services portuaires.Une fois connecté, nous pouvons poster de données à partir du serveur, rappelez-vous, après l'achèvement de l'opération doivent fermer la connexion.

Le code complet est le suivant:

#!/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()  

Maintenant, nous avons même d'ouvrir le terminal, le premier terminal exécute le fichier server.py:

$ python server.py

Le second terminal effectue fichier client.py:

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

Ceci est notre premier et puis ouvrez un terminal, vous verrez les informations suivantes est sortie:

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

modules Internet Python

Voici la programmation du réseau de Python module importante:

accord fonction utile Numéro de port Modules Python
HTTP accès Web 80 httplib, urllib, xmlrpclib
NNTP La lecture et l'affichage des articles de presse, connu sous le nom "post" 119 nntplib
FTP Transfert de fichiers 20 ftplib, urllib
SMTP Envoyer un e-mail 25 smtplib
POP3 Recevoir du courrier 110 poplib
IMAP4 Obtenez mail 143 imaplib
Telnet ligne de commande 23 telnetlib
gaufre Trouvez des informations 70 gopherlib, urllib

Plus de détails peuvent être trouvés dans le site officiel de Python de la bibliothèque Socket et les modules .