发送单张图片时解决打开问题
2016-03-23 12:48
267 查看
发送单张图片后要shutdownoutput,或者说用对输入流或者说输出流close()。甚至用将socket.close(),才能读出图片。但是想再给客户端发信息就没办法了。
解决方案:
1、服务器端首先发送此图片大小,再发\n结尾
2、客户端接收到大小后,将byte数组设置为1,计算循环次数。当次数为接收到的大小时退出循环
server端:
File file = new File(path);
FileInputStream input = new FileInputStream(file);
byte[] buffer=new byte[6000];
try {
writer.println((int) file.length());
writer.flush();
int num= input.read(buffer);
OutputStream output = ClientSocket.getOutputStream();
OutputStream sendStream = new DataOutputStream(new
BufferedOutputStream(output));
// sendStream.write(int) file.length());
while(num!=-1)
{
sendStream.write(buffer, 0,num);
sendStream.flush();
num=input.read(buffer);
}
sendStream.write('\r');
sendStream.write('\n');
sendStream.flush();
input.close();
客户端:
byte[] buffer = new byte[1];
File file= new File("test.jpg");
file.createNewFile();
InputStream input =
socket.getInputStream();
InputStream mess=new
DataInputStream(new BufferedInputStream(input));
String size = reader.readLine();
System.out.println("收到大小为: "+size);
RandomAccessFile recv = new RandomAccessFile(file,"rw");
int num =
mess.read(buffer);
int RecvSize=0;
while(num!=-1&&(RecvSize
{
RecvSize+=num;
recv.write(buffer,0,num);
recv.skipBytes(num);
num=mess.read(buffer);
// System.out.print("s:
"+RecvSize);
}
System.out.print("i am out");
System.out.println("共收到: "+RecvSize);
recv.close();
解决方案:
1、服务器端首先发送此图片大小,再发\n结尾
2、客户端接收到大小后,将byte数组设置为1,计算循环次数。当次数为接收到的大小时退出循环
server端:
File file = new File(path);
FileInputStream input = new FileInputStream(file);
byte[] buffer=new byte[6000];
try {
writer.println((int) file.length());
writer.flush();
int num= input.read(buffer);
OutputStream output = ClientSocket.getOutputStream();
OutputStream sendStream = new DataOutputStream(new
BufferedOutputStream(output));
// sendStream.write(int) file.length());
while(num!=-1)
{
sendStream.write(buffer, 0,num);
sendStream.flush();
num=input.read(buffer);
}
sendStream.write('\r');
sendStream.write('\n');
sendStream.flush();
input.close();
客户端:
byte[] buffer = new byte[1];
File file= new File("test.jpg");
file.createNewFile();
InputStream input =
socket.getInputStream();
InputStream mess=new
DataInputStream(new BufferedInputStream(input));
String size = reader.readLine();
System.out.println("收到大小为: "+size);
RandomAccessFile recv = new RandomAccessFile(file,"rw");
int num =
mess.read(buffer);
int RecvSize=0;
while(num!=-1&&(RecvSize
{
RecvSize+=num;
recv.write(buffer,0,num);
recv.skipBytes(num);
num=mess.read(buffer);
// System.out.print("s:
"+RecvSize);
}
System.out.print("i am out");
System.out.println("共收到: "+RecvSize);
recv.close();
相关文章推荐
- Linux学习笔记(十一)-系统安全篇…
- Linux学习笔记(十)-服务器配置篇…
- Linux学习笔记(九)-服务器配置篇…
- Linux学习笔记(八)-程序开发篇之…
- Ubuntu安装中文输入法
- BZOJ3679: 数字之积
- Springframework(一)spring基础概念介绍
- Linux学习笔记(七)-网络篇和多媒…
- Linux学习笔记(六)-系统管理篇之…
- Linux学习笔记(五)-系统管理篇之…
- Linux学习笔记(四)-系统管理篇之…
- NTFS和FAT文件系统的区别
- 先装linux后装windows的双系…
- JAVA中关闭OutputStream
- Linux学习笔记(三)—系统管理篇之…
- Linux学习笔记(二)-系统管理篇之…
- JAVA中修饰符类型的区别
- JAVA线程生命周期
- JAVA线程引起的CPU满负载
- Linux学习笔记(一)-基础篇