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

编程入门 行业动态 更新时间:2024-10-28 09:29:10
本文介绍了如何使用UDP套接字传输jpg图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 我想通过UDP连接传输jpg图像。我想要一个java代码来将图像转换为字节数组,并在另一边重新创建jpg文件。

我尝试的代码

图像到字节数组

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"); } }

图像的字节数组

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"); } }); } 推荐答案

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

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

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

但是要创建一个完整的1024字节的图像。 这就是为什么您得不到您想要的结果。

您需要实现一种机制来将它们缓冲到单个字节[]&;中,然后形成图像。

现在,只做一件事。以单个单元发送图像,即从图像创建一个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个字节。

更多推荐

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

本文发布于:2023-11-15 13:20:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1594796.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何使用   图像   UDP   jpg

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!