socket连续接收图片并显示的有关问题
socket连续接收图片并显示的问题
各位大大:
我有一个客户端程序,它不停的截图并将截图内容用socket发送到我的服务端来、
目前我只能做到让客户端一次只发送一张图片过来,服务端可以接收这张图片并保存下来。
但一旦客户端不停的发送,服务端就出现问题了,它会将收到的数据都存到一张图片里面去,然后这张图片占用空间就越来越大。
我的目的是想客户端不停的发送数据流过来,服务端这边收到并输出成图片,然后将图片按照接受顺序快速的显示在界面上。按照这种动画效果,期待能做成可以显示出客户端屏幕图像的效果。
以下是目前进行到的部分代码,现在急需解决的问题就是如何循环接受数据流并保存为图像。
------解决方案--------------------
为什么要断开?将clien.close()去掉
------解决方案--------------------
楼主的问题在于怎么让Server知道图片和图片的分界位置,即,什么时候前面那张图片结束了,后面是另外一张图片。
有个简便办法是将整张图片的byte[]一次性writeObject发出,Server上readObject读出。
------解决方案--------------------
各位大大:
我有一个客户端程序,它不停的截图并将截图内容用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读出。
------解决方案--------------------