使用套接字编程Python发送图像 [英] Send image using socket programming Python
问题描述
我正在尝试使用python中的套接字编程发送图像文件。我能够发送一个文本文件。但我一直在尝试发送一个图像文件,打开它并以字符串形式读取图像文件的内容,然后发送字符串并在客户端接收它,然后将其写入一个具有相同名称的文件中。不同的目录,但我无法打开该文件。我也在下面发布我的代码,评论的部分表明我已经尝试过了。此外,我在发送整数大小
时遇到问题,但我在另一端收到一些随机字符串。
I am trying to send an image file using socket programming in python. I am able to send a text file. But I have been trying to send an image file, by opening it and reading the contents of the image file in a string and then sending the string and receiving it on the client side and then writing it to a file with the same name in a different directory, but I am unable to open the file. Also I am posting my code below, the commented parts are an indication that I have already tried it. Also I am having problems sending the integer size
but I am receiving some random string on the other side.
这个是服务器脚本
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()
这是客户端脚本 -
And this is the client side script -
#!/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)
我在Crunchbang Linux上编程 - 非官方Debian基于Distro
viewnior是图像查看器。
I am programming on Crunchbang Linux - Unofficial Debian based Distro viewnior is the image viewer.
推荐答案
我在我的系统上运行了相同的代码(Ubuntu 11.10),我发现将字符串发送大小有问题。当我插入逻辑来处理该部分时,它运行顺利。我也可以打开文件。
这就是我如何解决你的问题:
客户代码(client.py)的第一次更改是在接受大小并发送确认时: -
I ran the same code on my system (Ubuntu 11.10) and I found that, there is a problem with sending size as a string. When I inserted logic to handle that part, it ran smoothly. I could open the file also. This is how I could solve your problem : 1st change in client code(client.py) is while accepting size and sending acknowledgement about it :-
size = ' '
while(1):
tmpsize = client_socket.recv(1)
if tmpsize.isdigit() == True:
print "Here : ",tmpsize
size += tmpsize
else:
break
client_socket.send("received")
第二次更改是服务器端(server.py)代码,接受确认: -
2nd change is in server side(server.py) code, to accept acknowledgement :-
client_socket.send(size)
ack = client_socket.recv(1024)
if ack == "received":
client_socket.send (strng)
我希望这可以帮助您解决问题。
I hope this will help you to solve your problem.
这篇关于使用套接字编程Python发送图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!