流过连续的Socket Android / Java

时间:2017-05-11 04:44:28

标签: java android image sockets stream

我试图将手机中的图片一次一张地发送到我的电脑上,但没有为每张图片打开一个新的Socket,因为我认为这不是一种非常高效的方式。我的问题是,我只收到第一张照片,而不是更多。但是第一张图片也不是“完整的”:它显示前两行像素,其余的与第2行的最后一个像素颜色相同。 我认为问题出在服务器端,因为我可以在手机上显示图像。我也非常喜欢溪流,并感谢我能得到的每一个帮助!

客户端

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            ByteArrayOutputStream memoryStream = new  ByteArrayOutputStream();
            Bitmap bitmapToSend =
                Bitmap.createScaledBitmap(bitmapToSend, 900, 800, true);
            bitmapToSend.compress(
                 Bitmap.CompressFormat.JPEG,100, memoryStream);
            byte[] byteArray = memoryStream.toByteArray();
            memoryStream = null;

            DataOutputStream outputStream = 
                      new DataOutputStream(server.getOutputStream());
            outputStream.writeInt(byteArray.length);
            outputStream.write(byteArray);
            outputStream.flush();
        } catch (IOException e) {
            System.out.println("Socket not created");
            e.printStackTrace();
        }
    }
}).start();

服务器

public static void readImages(InputStream stream) throws IOException    {

DataInputStream imgInput = new DataInputStream(stream);
int index = 0;
int byteLength;

try {
    while ((byteLength = imgInput.readInt())>0) {

        byte[] buffer = new byte[byteLength];
        imgInput.read(buffer);

        OutputStream imgOutput = new FileOutputStream("current" + (index++) + ".jpg");
        imgOutput.write(buffer);
        imgOutput.close();
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        imgInput.close();
    } catch (IOException f) {
        f.printStackTrace();
    }
}

}

0 个答案:

没有答案