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

giventian 2011-08-05 07:49:52
各位大大:
我有一个客户端程序,它不停的截图并将截图内容用socket发送到我的服务端来、

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

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


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

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


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

}
...全文
320 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
giventian 2012-07-12
  • 打赏
  • 举报
回复
感谢各位的答复,谢谢!
magong 2011-08-06
  • 打赏
  • 举报
回复
楼主的问题在于怎么让Server知道图片和图片的分界位置,即,什么时候前面那张图片结束了,后面是另外一张图片。
有个简便办法是将整张图片的byte[]一次性writeObject发出,Server上readObject读出。
jingluo 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 magong 的回复:]

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

传送协议上应该把数据的长度也传过来,这样server就有办法了
_jerrytiger 2011-08-05
  • 打赏
  • 举报
回复
为什么要断开?将clien.close()去掉
giventian 2011-08-05
  • 打赏
  • 举报
回复
Socket client = serverSocket.accept();
这句话没法放while循环外面去,不然客户端断开连接来,while循环还在继续,没有被阻塞,要出错。。。。
_jerrytiger 2011-08-05
  • 打赏
  • 举报
回复
如果只有一个客户端: Socket client = serverSocket.accept();
这句话能放在run方法里面的while循环里面吗?

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧