Voici le diagramme de configuration de base pour exécuter ce programme.
Pour plus de simplicité, nous appellerons le système A comme a_client et le système B comme b_server tout au long de l'article.
Exigences de fichier:
Nous avons besoin serveur.py Et ce fichier doit être présent au système serveur. Dans notre serveur de cas.Py devrait être au système B_Server.
Deux autres fichiers client.py et goûter.SMS devrait être présent au système client. Dans notre cas, ces deux fichiers devraient être présents au système A_Client.
Hypothèses:
Voici les hypothèses:
Limites:
Avant de poursuivre, nous devons savoir qu'il y a certaines limites de ce programme.
Configuration des exigences:
Code source du serveur:
https: // github.com / linuxhintcode / webleample / blob / maître / python_send_file / serveur.py
Code source du client:
https: // github.com / linuxhintcode / websamples / blob / maître / python_send_file / client.py
#!/ usr / bin / env python3Comment exécuter des programmes et une production attendue:
Voici les étapes pour exécuter le programme.
Étape 1: Accédez au système B_Server et ouvrez un terminal. La raccourci pour ouvrir un terminal est Alt + ctrl + t.
Étape2: allez maintenant le chemin où le serveur.py est présent.
Étape 3: Maintenant, exécutez le serveur.py comme ci-dessous
serveur Python3.py
Il ne devrait pas y avoir d'erreurs et vous devriez voir ci-dessous les impressions
Le serveur inscrit sur le port: 9898
Le nom du fichier copié sera Recv.txt à côté du serveur
ÉTAPE 4: Maintenant, terminal ouvert sur A_Client System.
Étape 5: allez sur le chemin où le client.py et échantillon.txt sont présents.
Étape 6: Maintenant, exécutez le client.py comme ci-dessous
Client Python3.pyNous avons observé que nous devons connaître l'adresse IP du serveur. Nous pouvons exécuter la commande ci-dessous pour connaître l'adresse IP du système B_Server.
ifconfig
Maintenant, la sortie du système A_Client devrait être comme ceci
################## # ° ci-dessous est reçu du serveur #################
| --------------------------------- |
Salut client [Adresse IP: 192.168.1.102],
** Bienvenue sur le serveur **
-Serveur
| --------------------------------- |
Étape7: Maintenant, allez sur b_server et recherchez la sortie ci-dessous
Le fichier a été copié avec succès
Le serveur a fermé la connection
Étape8: Il devrait y avoir un nom de fichier Recv.TXT au dossier du serveur. Le contenu de ce recv.TXT devrait être le même échantillon.SMS.
Nous avons donc réussi à copier un fichier du client au serveur sur le réseau via le programme Python.
Explications de code:
Il y a deux fichiers Python serveur.py et client.py.
Notez que nous expliquerons une fois si un code est le même serveur.py et client.py.
Ceci est une ligne Shebang qui signifie par défaut ce serveur.py devrait utiliser python3. Voyons un avantage de cette ligne.
Nous avons exécuté le serveur.py ou client.py comme python3 . Maintenant, sans utiliser python3, nous pouvons exécuter le fichier python. Suivez les commandes ci-dessous
Passez en mode User Super:
su
Donner toute la permission de .fichier py:
serveur Chmod 777.py
Exécuter le serveur.py:
./serveur.pysocket d'importation
Nous créons un objet «S» Pour accéder à toutes les méthodes de socket. C'est un concept OOPS.
Port = 9898Maintenant, nous choisissons un port où le serveur écoutera. Nous pouvons utiliser un port non réservé au lieu de cela.
s.lier ((", port))Nous utilisons la méthode Bind pour lier l'adresse IP du serveur à ce port [9898]. Une observation est que nous aurions pu utiliser l'adresse IP exacte du serveur à la place du premier argument de la méthode de liaison, mais nous choisissons de laisser vide car cela fonctionne bien.
s.lier ((adresse IP, port))Nous avons ouvert un nom de fichier «Recv.txt ”en mode serveur pour l'écriture et obtenu le pointeur de fichier. Ceci est nécessaire car nous devons copier un fichier texte à partir du client.
Bien que vrai:Commençons un Infinite pendant que le travail du serveur est d'attendre qu'un client communique avec le serveur sur ce port 9898. Donc, cette boucle est nécessaire.
Conn, addr = s.accepter()Ce code doit accepter toute demande de connexion entrante du client. Conn utilisera "Connecticut" communiquer avec le client et "Addr" est l'adresse IP du client qui a envoyé une demande d'agitation à ce serveur sur le port 9898.
msg = "\ n \ n | --------------------------------- | \ n HI Client [adresse IP:Ce code est de créer un message à envoyer au client. Ce message doit être imprimé sur le terminal client. Cela confirme que le client est capable de communiquer avec le serveur.
Connecticut.Envoyer (msg.encoder())Maintenant, nous avons le message prêt, puis l'envoyez au client en utilisant cela "Connecticut". Ce code envoie réellement un message au client.
Recvdata = conn.Recv (1024)Ce code reçoit toutes les données envoyées du côté client. Dans notre cas, nous nous attendons au contenu de l'échantillon.txt dans «Recvdata».
Pendant que Recvdata:Un de plus pendant que la boucle avec la condition de recvdata n'est pas vide. Dans notre cas, ce n'est pas vide.
déposer.écrire (recvdata)Une fois que nous avons du contenu à l'intérieur «Recvdata» Ensuite, nous écrivons dans ce fichier «Recv.SMS" Utilisation du pointeur de fichier "déposer".
Recvdata = conn.Recv (1024)Essayer à nouveau de recevoir s'il y a des données du client. Une fois «Recvdata» n'a pas de données, le code va casser la boucle while.
déposer.fermer()Cela fera simplement fermer le pointeur de fichier car nous avons fini avec le fichier write.
Connecticut.fermer()Cela fermera la connexion avec le client.
casserCeci va sortir d'Infinite en boucle sur b_server.
Importation de bibliothèque sys comme nous voulons utiliser l'installation d'argument dans Python.
if (Len (sys.argv)> 1):Au fur et à mesure que nous passons l'adresse IP de B_Server après nom de fichier Client.PY Pendant l'exécution, nous devons attraper l'adresse IP de ce serveur à l'intérieur du client.
… If (Len (sys.argv)> 1): => pour s'assurer que l'utilisateur passe au moins un argument comme adresse IP et captez cette adresse IP INSDIE «Servertip».
Si l'utilisateur ne passe pas au moins un argument, le code montre l'aide et sort du code.
Port = 9898Cela doit être le même port que celle mentionnée du côté b_server.
s.connecter ((serverip, port))Ce code fera la connexion TCP à Server IP avec ce port. Tout ce qui ne va pas sur ce ponint entraîne des échecs en relation.
fichier = ouvert ("Exemple.txt "," rb ")Nous ouvrons «échantillon.txt ”en mode lecture pour lire uniquement le contenu.
SendData = fichier.lire (1024)Lire le contenu du fichier et mettre à l'intérieur "Envoyer des données" variable.
tandis que SendData:Nous en commençons un pendant la boucle si «Envoyer des données" a des données. Dans notre cas, si «échantillonne.txt ”n'est pas vide, il devrait avoir des données.
s.envoyer (sendData)Maintenant, nous pouvons envoyer du contenu de "goûter.SMS" au serveur à l'aide d'objet Socket «S».
SendData = fichier.lire (1024)Encore une fois lire s'il reste quelque chose. Il n'y aura donc rien à lire dans le fichier "Envoyer des données" sera vide et il sortira de la boucle.
s.fermer()Ce n'est pas à la fermeture de la connexion du côté client.
Captures d'écran Ubuntu côté serveur
Captures d'écran Ubuntu côté client
Combinaisons testées:
La recommandation consiste à utiliser deux systèmes Linux pour le serveur et le client.
Traceback (dernier appel dernier):
Fichier "Client.py ", ligne 22, dans
s.connecter ((serverip, port))
ConnectionRefusedError: [Errno 111] Connexion refusée
Courir comme
Client Python3.py < serverip address >
Traceback (dernier appel dernier):
Fichier "Client.py ", ligne 22, dans
s.connecter ((serverip, port))
prise.Gaierror: [Errno -2] Nom ou service non connu
Traceback (dernier appel dernier):
Fichier "Client.py ", ligne 22, dans
s.connecter ((serverip, port))
Overflowerror: getockaddrarg: le port doit être 0-65535.
Traceback (dernier appel dernier):
Fichier "Client.py ", ligne 25, en
fichier = ouvert ("Exemple.txt "," rb ")
Filenotfounderror: [errno 2] pas de tel fichier ou répertoire: «Exemple.SMS'
En utilisant ce programme, nous pouvons envoyer un fichier texte simple d'un système à un autre système via le réseau à l'aide du programme Python. Cela nous donne l'apprentissage de base de la programmation Python et Socket également pour l'envoi de données sur le réseau.