通过套接字将图像从python服务器发送到Android客户端

时间:2019-07-22 18:41:42

标签: java python android

我目前正在做一个与Raspberry Pi zero w一起工作的项目,该服务器用作服务器,拍摄照片并将其通过套接字发送到客户端的Android Studio中的移动应用程序。之前,我曾进行过将图像从一个手机发送到另一台手机的测试,并且可以正常工作,但是现在我正尝试使用Python从服务器发送图像,而在Android Studio中,会出现以下错误:Invalid stream header: FFD8FFE1


import io
import socket
import picamera

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Sockek created...")

server_socket.bind(('', 8000))
server_socket.listen(2)

print("Server listening...")

with picamera.PiCamera() as camera:
    camera.resolution = (640, 480)
    camera.start_preview()

    connection,addr = server_socket.accept()
    print("Connected to:"+addr[0]+":"+ str(addr[1]))

    try:
        stream = io.BytesIO()
        camera.capture(stream, 'jpeg')
        stream.seek(0)
        connection.send(stream.read())
        stream.seek(0)
        stream.truncate()

    finally:
        connection.close()
        server_socket.close()
        camera.stop_preview()
        print("Connection closed")

    private class ClientRxThread extends Thread{
        String dstAddress;
        int dstPort;
        byte[] data;
        ClientRxThread(String address, int port){
            dstAddress=address;
            dstPort = port;

        }
        public void run(){
            Socket socket = null;
            Uri uri = null;
            try {
                socket = new Socket(dstAddress, dstPort);
                File file = new File(Environment.getExternalStorageDirectory(),
                        "Image.jpg");


                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                byte[] bytes;
                FileOutputStream fos = null;
                try {
                    bytes = (byte[])ois.readObject();
                    fos = new FileOutputStream(file);
                    fos.write(bytes);

                    String realPath = file.getAbsolutePath();
                    File f = new File(realPath);
                    uri =Uri.fromFile(f);

                } catch (ClassNotFoundException e) {

                    e.printStackTrace();
                } finally {
                    if(fos!=null){
                        fos.close();
                    }

                }
                socket.close();

                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this,"Image received",Toast.LENGTH_LONG).show();
                        pickReader();

                    }
                });
            }catch (IOException e){
                e.printStackTrace();
                final String eMsg = "Something wrong: "+ e.getMessage();
                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this,eMsg,Toast.LENGTH_LONG).show();
                    }
                });
            }finally {
                if(socket!= null){
                    try{
                        socket.close();
                    }catch (IOException e){
                        Toast.makeText(MainActivity.this,"server not connected",Toast.LENGTH_LONG).show();
                        e.printStackTrace();
                    }
                }
            }

        }
    }

android studio中的错误是: java.io.StreamCorruptedException: invalid stream header: FFD8FFE1

0 个答案:

没有答案