如何使用UDP套接字传输jpg图像

阿桑加(Asanga ranasinghe)

我想通过UDP连接传输jpg图像。我想要一个Java代码将图像转换为字节数组,并在另一侧重新创建jpg文件。

我试过的代码

图像到ByteArray

    BufferedImage img = ImageIO.read(new File("src/test.jpg"));
    ByteArrayOutputStream baos = new ByteArrayOutputStream();        
    ImageIO.write(img, "jpg", baos);
    baos.flush();
    byte[] buffer = baos.toByteArray();
    byte[] buff = new byte[1024];
    int c=0;

    DatagramSocket clientSocket = new DatagramSocket();       
    InetAddress IPAddress = InetAddress.getByName("192.168.43.1");
    System.out.println(buffer.length);
    for(int i=0;i<buffer.length;i++){
        buff[c] = buffer[i];
        c++;
        if(i%1023==0){
            DatagramPacket packet = new DatagramPacket(buff, buff.length, IPAddress, 9876);
            buff = new byte[1024];
            c=0;
            clientSocket.send(packet);

            System.out.println("sent a mini-packet");
        }
    }

ByteArray到图像

tv = (TextView)findViewById(R.id.recv_message);
try {
  DatagramSocket clientsocket=new DatagramSocket(9876);
  byte[] receivedata = new byte[1024];
  while(true)
  {
    DatagramPacket recv_packet = new DatagramPacket(receivedata, receivedata.length);
    Log.d("UDP", "S: Receiving...");

    clientsocket.receive(recv_packet);       

    byte[] buff = recv_packet.getData();
    final Bitmap new_img = BitmapFactory.decodeByteArray(buff, 0,
            buff.length);
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            tv.setText("received");
            ImageView image = (ImageView) findViewById(R.id.test_image);
            image.setImageBitmap(new_img);
        }
    });



    InetAddress ipaddress = recv_packet.getAddress();
    int port = recv_packet.getPort();
    Log.d("IPAddress : ",ipaddress.toString());
    Log.d(" Port : ",Integer.toString(port));
  }
} catch (Exception e) {
  Log.e("UDP", "S: Error", e);
  runOnUiThread(new Runnable() {
      @Override
      public void run() {
          tv.setText("Error Occured");
      }
  });
}
库扬·塔达尼(Kunjan Thadani)

图像发送方式中有一个小问题。最初,图像被转换为​​byte [],然后发送各个字节,即完整的图像被破坏并通过不同的较小数据包发送。

现在,当您尝试接收数据包时,将分别接收每个数据包,并且每次接收到一个小数据包时都会创建一个映像。

对于前。令图像为1024字节。您正在发送其单个字节,例如1,然后是2,....1024。在接收它们时,说已接收到数据包1,它正在使用该单个数据包创建映像。同样,当第二个数据包到达时,正在创建另一个图像。

但是要创建一个完整的1024字节的映像。这就是为什么您没有获得想要的结果。

您需要实现一种将它们缓冲到单个byte []中然后形成图像的机制。

现在,只做一件事。以单个单位发送图像,即从图像创建一个byte []并直接发送而不破坏它或从循环中单独发送字节。

 BufferedImage img = ImageIO.read(new File("src/test.jpg"));
 ByteArrayOutputStream baos = new ByteArrayOutputStream();        
 ImageIO.write(img, "jpg", baos);
 baos.flush();
 byte[] buffer = baos.toByteArray();

 DatagramSocket clientSocket = new DatagramSocket();       
 InetAddress IPAddress = InetAddress.getByName("192.168.43.1");
 System.out.println(buffer.length);

  DatagramPacket packet = new DatagramPacket(buffer, buffer.length, IPAddress, 9876);

  clientSocket.send(packet);

现在,当您接收到数据包时,由于将立即接收所有1024个字节,因此可以形成完整的图像。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过UDP套接字传输结构的麻烦

来自分类Dev

Python UDP套接字文件传输

来自分类Dev

通过套接字发送压缩的JPG图像

来自分类Dev

对UDP套接字使用shutdown()

来自分类Dev

如何使用 Java 从套接字正确流式传输数据

来自分类Dev

如何使用HTML5与UDP套接字通信?

来自分类Dev

如何通过套接字传输Android对象?

来自分类Dev

使用TCP套接字传输图像时丢失一像素行

来自分类Dev

无法使用UDP套接字监听C ++

来自分类Dev

使用 UDP 进行 Java 套接字编程

来自分类Dev

如何使用Java套接字HTTP / 1.1请求下载图像?

来自分类Dev

如何使用ZeroMQ通过TCP套接字发送PNG图像?

来自分类Dev

如何使用gzip压缩和分块传输编码修复c套接字http服务器中图像的怪异变形

来自分类Dev

线程UDP套接字

来自分类Dev

如何通过Java套接字使用IOUtils.copy传输文件

来自分类Dev

如何在C ++中使用套接字(UDP)在LAN上查找服务器

来自分类Dev

如何使用Unity多播UDP套接字改善数据同步

来自分类Dev

如何获得内核使用connect()分配给UDP套接字的本地地址?

来自分类Dev

如何使用Wifi udp套接字编程来控制鼠标指针

来自分类Dev

如何使用相同的本地端口打开两个udp客户端套接字

来自分类Dev

如何衡量通过套接字的数据传输速度?

来自分类Dev

如何在Python中完成套接字文件传输?

来自分类Dev

如何通过Java中的套接字编程传输zip文件?

来自分类Dev

如何保证write()将通过套接字传输整个int?

来自分类Dev

如何衡量通过套接字的数据传输速度?

来自分类Dev

如何通过Java中的套接字编程传输zip文件?

来自分类Dev

如何在Python中完成套接字文件传输?

来自分类Dev

如何在rsync传输期间跳过特殊/套接字文件?

来自分类Dev

如何通过套接字传输std :: multimap数据

Related 相关文章

  1. 1

    通过UDP套接字传输结构的麻烦

  2. 2

    Python UDP套接字文件传输

  3. 3

    通过套接字发送压缩的JPG图像

  4. 4

    对UDP套接字使用shutdown()

  5. 5

    如何使用 Java 从套接字正确流式传输数据

  6. 6

    如何使用HTML5与UDP套接字通信?

  7. 7

    如何通过套接字传输Android对象?

  8. 8

    使用TCP套接字传输图像时丢失一像素行

  9. 9

    无法使用UDP套接字监听C ++

  10. 10

    使用 UDP 进行 Java 套接字编程

  11. 11

    如何使用Java套接字HTTP / 1.1请求下载图像?

  12. 12

    如何使用ZeroMQ通过TCP套接字发送PNG图像?

  13. 13

    如何使用gzip压缩和分块传输编码修复c套接字http服务器中图像的怪异变形

  14. 14

    线程UDP套接字

  15. 15

    如何通过Java套接字使用IOUtils.copy传输文件

  16. 16

    如何在C ++中使用套接字(UDP)在LAN上查找服务器

  17. 17

    如何使用Unity多播UDP套接字改善数据同步

  18. 18

    如何获得内核使用connect()分配给UDP套接字的本地地址?

  19. 19

    如何使用Wifi udp套接字编程来控制鼠标指针

  20. 20

    如何使用相同的本地端口打开两个udp客户端套接字

  21. 21

    如何衡量通过套接字的数据传输速度?

  22. 22

    如何在Python中完成套接字文件传输?

  23. 23

    如何通过Java中的套接字编程传输zip文件?

  24. 24

    如何保证write()将通过套接字传输整个int?

  25. 25

    如何衡量通过套接字的数据传输速度?

  26. 26

    如何通过Java中的套接字编程传输zip文件?

  27. 27

    如何在Python中完成套接字文件传输?

  28. 28

    如何在rsync传输期间跳过特殊/套接字文件?

  29. 29

    如何通过套接字传输std :: multimap数据

热门标签

归档