【问题标题】:Images from server to client by socket通过套接字从服务器到客户端的图像
【发布时间】:2013-01-26 11:13:19
【问题描述】:

我尝试了几种我在互联网上找到的关于如何通过套接字发送多个图像的解决方案,但我无法让它按我的意愿工作。我有以下设置:

客户:

  1. 一个线程拍摄我的屏幕快照并将它们放入队列中
  2. 多个线程从队列中读取并通过套接字将图像发送到服务器

服务器:

  1. 允许多个连接并接收图像并将它们放入队列的套接字服务器
  2. 读取队列并将图像写入 JPanel 的线程

我的问题是我很难通过套接字发送图像,例如。保持打开的套接字并仅流式传输图像。我尝试了不同的解决方案,但只发送了第一张图片。如果有人可以分享一些关于如何将多个图像从一个线程写入另一个线程的代码,我将不胜感激。

编辑

感觉每张图片都没有刷新?我现在创建 1 个线程以通过打开的连接发送:

while(true)
{
  BufferedImage imageQItem = (BufferedImage) queue.dequeue();
  ImageIO.write(imageQItem,"jpg",out);//out is a dataoutputstream
}

然后我将其读入(我的套接字服务器为上述客户端的连接创建了一个新线程)

while(true)
{
  System.out.println("Reading");
  BufferedImage image = ImageIO.read(in);
  viewer.setBufferedImage(image);
  viewer.repaint();
}

所发生的只是它一直在打印阅读。我似乎没有结束每张图片。

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java image sockets


【解决方案1】:

byte[] 的形式发送(和接收)每个图像,最好使用压缩图像的文件格式,例如 .jpg。不要忘记flush() 图像之间的流。并确保在尝试读取下一个图像之前读取图像的所有字节。

【讨论】:

    【解决方案2】:

    通过网络发送图像非常困难。原因是文件太大了,如果不先压缩它们,几乎不可能发送它们。试试这个链接,它可能会对你有所帮助,因为没有你的代码我帮不上什么忙。 How to send Image data type via socket in java希望对您有所帮助!

    【讨论】:

    • 图像通常已经被压缩,您可能会注意到它们的压缩效果不是很好。每秒有数百万张图片通过网络发送。
    • 这是真的,但仍然不是一件容易的事。
    猜你喜欢
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多