我试图从我的android服务器向我的python客户端发送PNG文件 我尝试发送的PNG图像是一个屏幕截图,大约4mb顶部,通常低于2mb。
android代码(发送):
File myFile = new File(imagePath);
FileInputStream fis = null;
try {
fis = new FileInputStream(myFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
BufferedInputStream bis = new BufferedInputStream(fis);
Log.i("service", "sending file len");
try {
out.write("" +myFile.length());
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
Log.i("service:", "waiteing for ok");
try {
msg = in.readLine();
} catch (Exception e) {
e.printStackTrace();
}
Log.i("service", "sending file");
byte[] outBuffer = new byte[(int) myFile.length()];
try {
bis.read(outBuffer, 0, outBuffer.length);
os = client.getOutputStream();
os.write(outBuffer, 0, outBuffer.length);
} catch (IOException e) {
e.printStackTrace();
}
python代码(接收):
print "waiting for responce's length"
MSGLEN = int(sock.recv(bufferLen))
print MSGLEN
sock.sendall("ok" +"\n")
chunks = []
bytes_recd = 0
while bytes_recd < MSGLEN:
chunk = sock.recv(min(MSGLEN - bytes_recd, bufferLen))
chunks.append(chunk)
bytes_recd = bytes_recd + len(chunk)
dataRecived = ''.join(chunks)
print 'data receieved'
print 'writing data to file'
fileout = open("D:\shots.png", 'w')
fileout.write(dataRecived)
fileout.close()
文件从android传输到我的电脑,但文件已损坏
当我将它与原始图像进行比较时,几乎所有内容都相同
除了这里和那里的一些空行(没有丢失信息,只是像有人添加\ n的空行)和1或2个大块行(15行左右)丢失。
Here你可以看到tho文件之间的比较(发送后的左原文,右文件)
我不知道文件传输损坏的原因,请帮助我。
答案 0 :(得分:1)
尝试将其编码为Base64并发送一个简单的字符串。那些缺失的行也是图像数据的一部分 - 请记住它们是二进制的。
答案 1 :(得分:0)
Base64或Bytestream是您需要的