日期:2014-05-20  浏览次数:20908 次

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读出。