【问题标题】:Sending a bunch of images from an android phone to a PC将一堆图像从 Android 手机发送到 PC
【发布时间】:2018-06-14 19:48:50
【问题描述】:

我正在开发一个应用程序,该应用程序假设将图像从 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();
    }

【问题讨论】:

标签: java c# android image client-server


【解决方案1】:

有没有考虑写个小REST web service

这种方法会有一些优势:

  • 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/

【讨论】:

  • 我已经构建了一个 Web 平台,将用作我的应用程序的 Web 界面。我只需要完成客户端服务器部分。但我坚持创建一个将传输元数据然后数据的协议。有人可以帮忙吗?
  • 您使用什么语言和框架/库来构建您的网络应用程序?
猜你喜欢
  • 2014-03-10
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多