首页 > 解决方案 > 将一堆图像从 Android 手机发送到 PC

问题描述

我正在开发一个应用程序,该应用程序假设将图像从 android 手机传输到服务器 - 客户端架构中的 PC(下面添加了 java(android)代码)。照片假设通过 bytearray。我很难弄清楚如何通过 TCP 创建一个协议,该协议能够在不丢失信息的情况下传递我的图像,并且还能够传递图像的元数据,例如图像名称、扩展名、大小,也许是元数据大小(如果需要?)。我非常感谢您的帮助,因为我是 C# 的新手,并且正在编写客户端服务器,尤其是假设传输某种扩展图像的客户端服务器。

private void makeTCPConnection() {
        try {
            InetAddress serverAddr = InetAddress.getByName("10.0.2.2");
            //create a socket to make the connection with the server
            Socket socket = new Socket(serverAddr, 8000);

            try {
                //Sends the message to the server
                OutputStream output = socket.getOutputStream();
                File dcim = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
                if(dcim == null)
                    return;
                File[] pics=dcim.listFiles();
                int count=0;
                if(pics != null){
                    for(File pic:pics){

                    FileInputStream fis = new FileInputStream(pic);
                    Bitmap bm = BitmapFactory.decodeStream(fis);
                    byte[] imgbyte = getBytesFromBitmap(bm);
                    output.write(imgbyte);
                    output.flush();
                    }
                }
            }catch (Exception e){
             Log.e("TCP","S:Error",e);
            }finally {
                socket.close();
            }
        }catch (Exception e){
            Log.e("TCP","C:Error",e);
        }
    }

    public byte[] getBytesFromBitmap(Bitmap bitmap){
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG,70,stream);
        return stream.toByteArray();
    }

标签: javac#androidimageclient-server

解决方案


您是否考虑过编写一个小型REST Web 服务

这种方法有一些优点:

  • HTTP(人类可读)用作协议,因此您不必提出自己的协议。
  • JSON(人类可读)可用于传输数据。(也许不是用于照片,而是用于元数据。)
  • 客户端和服务器端有很多库。
  • 客户端和服务器可以用不同的语言编写。
  • 在某些语言中,只需几行代码即可创建 REST Web 服务。
  • 在编写客户端应用程序之前,可以先编写 REST Web 服务并对其进行测试(使用 REST 客户端)。
  • 可以轻松添加更多 REST 端点。(也许您先构建一个简单的上传,然后添加更多端点来上传元数据。)

对于 Android,我可以推荐Retrofit作为 REST 客户端。如果你想在服务器端使用 Java,我会推荐Spring/Spring Boot。(Spring Boot 中 REST Web 服务的操作指南:https ://spring.io/guides/gs/rest-service/ )


推荐阅读