将文件从python服务器传输到android客户端

时间:2016-04-18 15:12:48

标签: android python-2.7 file-transfer

我有一个python 2.7服务器和一个Android应用程序。我所做的是:将一个URL作为字符串发送到服务器,将其转换为PDF文件,然后我想将此文件发送到我的Android应用程序。问题是在Android应用程序我认为,我发送文件没有问题从服务器,但当我尝试在Android上打开它是空的(0字节文件)...

Python服务器代码:

class ThreadedServer(object):
def __init__(self, host, port):
    self.host = host
    self.port = port
    self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    self.sock.bind((self.host, self.port))

def listen(self):
    self.sock.listen(5)
    while True:
        client, address = self.sock.accept()
        client.settimeout(60)
        threading.Thread(target = self.listenToClient,args = (client,address)).start()

def listenToClient(self, client, address):
    size = 1024

    try:
        data=client.recv(size)

        /*code to convert URL into PDF*/
        /*output file to send is out.pdf*/

        fl=open("out.pdf")
        print fl.name

        while True:
            chunk = file.read(fl)
            if not chunk:
                break

        client.sendall(chunk)            

    except Exception, e:
        print str(e)
        client.close()

if __name__ == "__main__":
    ThreadedServer('',4095).listen()

Android类传输文件:

public class Conversione extends AsyncTask<String, String, File> {

@Override
protected File doInBackground(String... params) {
    String s=params[0],fl=null;
    BufferedOutputStream scrivi=null;
    Socket ss;
    try {
        ss = new Socket(InetAddress.getByName("192.168.1.8"),4095);
        scrivi = new BufferedOutputStream(ss.getOutputStream());
        scrivi.write(s.getBytes());
        scrivi.flush();

        File file = new File(Environment.getExternalStorageDirectory(),"/MyReader");
        if(!file.exists())
            file.mkdir();

        fl= Environment.getExternalStorageDirectory().toString()+"/MyReader/out.pdf";
        byte[] buffer = new byte[1024];
        int lenght;
        InputStream is = ss.getInputStream();
        OutputStream os = new FileOutputStream(fl);

        while((lenght=is.read(buffer))>0){
            os.write(buffer,0,lenght);
        }

        os.close();
        ss.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
    File f=new File(fl);
    return f;
}
}

我不知道为什么这不起作用,有人可以帮助我吗?

0 个答案:

没有答案