如何从android发送PNG文件并在python中接收它

时间:2015-04-17 13:24:22

标签: android python sockets png

我试图从我的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文件之间的比较(发送后的左原文,右文件) 我不知道文件传输损坏的原因,请帮助我。

2 个答案:

答案 0 :(得分:1)

尝试将其编码为Base64并发送一个简单的字符串。那些缺失的行也是图像数据的一部分 - 请记住它们是二进制的。

答案 1 :(得分:0)

Base64或Bytestream是您需要的