Envoyer une image en utilisant la programmation par socket Python
Je suis en train d'envoyer un fichier image à l'aide de socket de la programmation en python. Je suis en mesure d'envoyer un fichier de texte. Mais j'ai essayé d'envoyer un fichier image, par l'ouverture, et de lire le contenu du fichier image dans une chaîne, puis l'envoi de la chaîne et de la réception sur le côté client et ensuite l'écrire dans un fichier avec le même nom dans un répertoire différent, mais je n'arrive pas à ouvrir le fichier. Je vais poster mon code ci-dessous, le commentaire de pièces sont une indication que j'ai déjà essayé. Aussi, je vais avoir des problèmes d'envoi de l'entier size
mais je suis recevant une chaîne aléatoire de l'autre côté.
C'est le script Serveur
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("", 5000))
server_socket.listen(5)
import os
client_socket, address = server_socket.accept()
print "Conencted to - ",address,"\n"
while (1):
choice = client_socket.recv(1024)
choice = int(choice)
if(choice == 1):
data = client_socket.recv(1024)
print "The following data was received - ",data
print "Opening file - ",data
fp = open(data,'r')
strng = fp.read()
size = os.path.getsize(data)
size = str(size)
client_socket.send(size)
client_socket.send (strng)
#client_socket.close()
if (choice == 2):
data = client_socket.recv(1024)
print "The following data was received - ",data
print "Opening file - ",data
fp = open(data,'r')
strng = fp.read()
#strng = str(fp)
size = os.path.getsize(data)
print size
size = str(size)
print size
client_socket.send(size)
client_socket.send (strng)
#client_socket.close()
Et c'est le script côté client, -
#!/usr/bin/python
# TCP client example
import socket,os
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("", 5000))
k = ' '
size = 1024
while(1):
print "Do you want to transfer a \n1.Text File\n2.Image\n3.Video\n"
k = raw_input()
client_socket.send(k)
k = int (k)
if(k == 1):
print "Enter file name\n"
strng = raw_input()
client_socket.send(strng)
size = client_socket.recv(1024)
size = int(size)
print "The file size is - ",size," bytes"
size = size*2
strng = client_socket.recv(size)
print "\nThe contents of that file - "
print strng
if (k==2):
print "Enter file name of the image with extentsion (example: filename.jpg,filename.png) - "
fname = raw_input()
client_socket.send(fname)
size = client_socket.recv(1)
print size
#size = int(size)
print "The file size is - ",size
size = size*2
strng = client_socket.recv(256456)
print "\nThe file will be saved and opened- "
fname = 'downloads/'+fname
nf = open(fname,'w')
nf.write(strng)
nf.close()
fname = 'viewnior '+ fname
print fname
os.system(fname)
Je suis de programmation sur Crunchbang Linux - Officieux Distro basée sur Debian
viewnior est le spectateur de l'image.
source d'informationauteur mihirk
Vous devez vous connecter pour publier un commentaire.
J'ai couru le même code sur mon système (Ubuntu 11.10) et je l'ai trouvé, il y a un problème avec la taille de l'envoi comme une chaîne de caractères. Quand j'ai inséré logique pour traiter cette partie, il s'est passé en douceur. J'ai pu ouvrir le fichier aussi.
C'est comment je pourrais résoudre votre problème :
1er changement dans le code client(client.py) est tout en acceptant que la taille et l'envoi de l'accusé de réception :-
2ème changement est dans le côté serveur(server.py le code, à accepter d'accusé de réception :-
J'espère que cela va vous aider à résoudre votre problème.
Merci Sanket. 😀 j'ai eu un problème lors de l'envoi de données dans d'énormes morceaux je l'ai donc divisé en secteurs de 512 octets et maintenant il fonctionne parfaitement, même pour les vidéos. 😀 suffit d'ajouter le pygtk interface pour la confirmation de la réception de fichiers et de les envoyer 😀
Et voici le code du serveur