TCP/IP发送图片,swing.JPanel显示并更新图片(二、图片发送和发送/接受的同步)
来源:互联网 发布:陕西软件行业待遇 编辑:程序博客网 时间:2024/06/06 01:38
上一篇文章介绍了图片的加载和刷新
本篇将介绍socket发送多张图片,图片结束判断以及发送/接受的同步
Server端,在Frame初始化的最后,起进程来监听端口
server = new TestServer();
new Thread(server).start();
一旦有客户端连接到这个端口,server就会通过DataOutputStream持续发送图片给客户端
OutputStream outStream = incoming.getOutputStream();
DataOutputStream dos = new DataOutputStream(outStream);
countPhoto = 1;
while(true)
{
//更新图片在imagePanel中的显示
File file = null;
try{
file = new File("Sample Pictures/" + countPhoto + ".jpg");
//显示图片更新
Image image=ImageIO.read(file);
imagePanel.loadPhoto(image);
imagePanel.repaint();
}
catch(Exception e){
//如果文件不存在,则停止发送,跳出while
System.out.println(e);
textArea.setText("-- " + countPhoto + ".jpg 图片不存在,发送结束!--");
break;
}
File photo = new File("Sample Pictures/" + countPhoto + ".jpg");
FileInputStream fis = new FileInputStream(photo);
byte[] sendBytes = new byte[1024];
while( (length = fis.read(sendBytes, 0, sendBytes.length))>0 ){
if(length!=1024)
System.out.println(length);
dos.write(sendBytes, 0, length);
dos.flush();
}
countPhoto++;
}
每张图片的结束在内层 while( (length = fis.read(sendBytes, 0, sendBytes.length))>0 )判断
遇到的两个问题是:
1. client如何判断一张图片发送结束?
本来以为server端每次都是发送1024个字节,只有在图片的最后不够1024才会发送小于1024的字节长度,所以把接受到字节数组中小于1024作为结束标志。但是测试发现图片有时候只显示半截,后来通过打印接收到的字节数组长度,发现1024可以分为两个512等多种情况发送。所以搜了一下,发现还是需要通过每张图片的长度来判断图片发送结束。
2. 发送图片的速度与接受的速度不一致,图片显示不同步
本来以为通过加sleep解决,发现很难同步。后来网搜了一下,发现问题在于server只有发送的IO, client只有接收的IO。造成的问题是server不管client的反应就不停的发送,sleep是发送进程休眠是不能很准确的解决这个问题的,所以在clent正式接受图片前,接受图片长度完毕后,发送给server一个接受图片长度成功的字符串。
下一篇会贴出所有的代码。
- TCP/IP发送图片,swing.JPanel显示并更新图片(二、图片发送和发送/接受的同步)
- TCP/IP发送图片,swing.JPanel显示并更新图片(一、图片显示和更新)
- C# 利用TCP/IP协议发送图片文件,并显示
- 发送图片
- flex 获取并发送发送图片
- 通过TCP/IP协议发送图片到服务端
- 微信公众号如何接受图片与发送图片
- XMPP 发送消息,发送图片
- Socket发送图片,循环发送
- BASE64发送图片和保存图片
- TCP/IP (二) TCP消息的发送
- swing jpanel图片平铺
- Swing 将显示好的JPanel保存为一张图片
- 浅谈邮件的发送和接受(二)
- Messagqueue发送图片
- cdo发送图片邮件
- Socket发送图片
- Socket发送图片
- 网络编程经典好书推荐
- caffe示例实现之8在MNIST数据上训练与测试siamese网络
- 2015.9.3反法西斯胜利70周年大阅兵评论
- 异常
- 密码框组件的使用
- TCP/IP发送图片,swing.JPanel显示并更新图片(二、图片发送和发送/接受的同步)
- 如何快速使用log4j进行开发
- iOS开发之属性、单例、代理、通知传值比较
- Android第八讲——多媒体(四)播放视频(mp4/3gp) MediaPlayer
- U3D UGUI学习2 - RectTransform
- 全注解SSH
- 教你如何迅速秒杀掉:99%的海量数据处理面试题
- 百度地图接口调用
- Maven实战之antrun插件