首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

socket连续接收图片并显示的有关问题

2012-08-09 
socket连续接收图片并显示的问题各位大大:我有一个客户端程序,它不停的截图并将截图内容用socket发送到我

socket连续接收图片并显示的问题
各位大大:
我有一个客户端程序,它不停的截图并将截图内容用socket发送到我的服务端来、

目前我只能做到让客户端一次只发送一张图片过来,服务端可以接收这张图片并保存下来。

但一旦客户端不停的发送,服务端就出现问题了,它会将收到的数据都存到一张图片里面去,然后这张图片占用空间就越来越大。


我的目的是想客户端不停的发送数据流过来,服务端这边收到并输出成图片,然后将图片按照接受顺序快速的显示在界面上。按照这种动画效果,期待能做成可以显示出客户端屏幕图像的效果。

以下是目前进行到的部分代码,现在急需解决的问题就是如何循环接受数据流并保存为图像。

Java code
   public void run() {         try {                //获取当前时间                Calendar rightNow = Calendar.getInstance();                 Date time = rightNow.getTime();                 System.out.println(time.toString());                 //开始连接             System.out.println(time.toString()+"-->S: Connecting..." );             ServerSocket serverSocket = new ServerSocket(SERVERPORT);             while (true) {                 //开始接收                    for (int j = 0; j < 10; j++)                    {                       //String imgname = "test";                 Socket client = serverSocket.accept();                                    System.out.println(time.toString()+"-->S: Receiving...");                  //输出为图像                   try {                  InputStream   stream   =   client.getInputStream();                                                                                                                  FileOutputStream   bos   =   new   FileOutputStream( "d:\\imgtest\\test"+j+".jpg ");                    // FileOutputStream   bos   =   new   FileOutputStream( "d:\\test01.jpg ");                                         int   bytesRead   =   0;                      // while(stream.read()!=-1)                       //        bytesRead++;                       //   System.out.println(bytesRead+"bytes");                     byte[]   buffer   =   new   byte[8192];                      bytesRead = 0;                     while   ((bytesRead   =   stream.read(buffer,   0,   8192))   !=   -1)   {                      bos.write(buffer,   0,   bytesRead);                      }                      bos.close();                      stream.close();                                       } catch(Exception e) {                        System.out.println(time.toString()+"-->S: Error");                        e.printStackTrace();                    } finally {                        client.close();                        System.out.println(time.toString()+"-->S: Done.");                    }                    }             }          } catch (Exception e) {             System.out.println("S: Error");             e.printStackTrace();         }             }


[解决办法]
为什么要断开?将clien.close()去掉
[解决办法]
楼主的问题在于怎么让Server知道图片和图片的分界位置,即,什么时候前面那张图片结束了,后面是另外一张图片。
有个简便办法是将整张图片的byte[]一次性writeObject发出,Server上readObject读出。
[解决办法]
探讨

楼主的问题在于怎么让Server知道图片和图片的分界位置,即,什么时候前面那张图片结束了,后面是另外一张图片。
有个简便办法是将整张图片的byte[]一次性writeObject发出,Server上readObject读出。

热点排行