在服务器端将一个文件传递给客户端,客户端的接收文件的时候出现问题了
DataInputStream datain = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
DataOutputStream dataout = new DataOutputStream(new BufferedInputStream(new FileOutputStream("testfile");
int buffersize = 1024;
byte buf[]=new byte[buffersize];
while((read=datain.read(buf))!=-1)// 报错sockettimeoutexception:read time out
{
System.out.println(read);//显示接收到的字节数:1024+927
dataout.write(buf,0,read);}
dataout.flush();服务器端传送的文件是1951k,与客户端接收到的字节数相同,但是在接收完后,再一次判断read=datain.read(buf)是否为-1时,就报错:sockettimeoutexception:read time out这是怎么回事呀
DataInputStream datain = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
DataOutputStream dataout = new DataOutputStream(new BufferedInputStream(new FileOutputStream("testfile");
int buffersize = 1024;
byte buf[]=new byte[buffersize];
while((read=datain.read(buf))!=-1)// 报错sockettimeoutexception:read time out
{
System.out.println(read);//显示接收到的字节数:1024+927
dataout.write(buf,0,read);}
dataout.flush();服务器端传送的文件是1951k,与客户端接收到的字节数相同,但是在接收完后,再一次判断read=datain.read(buf)是否为-1时,就报错:sockettimeoutexception:read time out这是怎么回事呀
DataInputStream datain = new DataInputStream(new BufferedInputStream(new FileInputStream("testfile));
DataOutputStream dataout = new DataOutputStream(new BufferedInputStream(socket.getOutputStream()));
int buffersize = 1024;
byte buf[]=new byte[buffersize];
while((read=datain.read(buf))!=-1)
{
System.out.println(read);
dataout.write(buf,0,read);}
dataout.flush();
我开始在最后是没有关闭dataout和datain的,后来把这两个关闭之后 ,客户端那边就能正常接收文件了,但是我在客户端接收完文件后,再给服务器返回一个信息的时候服务器就又报错了:stream closed
应该是因为我在服务器这边传递完文件后把dataout跟datain都 close了导致的吧,但是如果 不关客户端又不能正确 接收文件~~~~~
哪位大侠帮忙指点一下
两边都是flush()了的,但是在客户端还是会一直等待直到报read time out 的exception
客户端好像就是一直读不到文件流结束的地方,一直在等待,而服务器端的dataout.close()之后 ,客户端就可以正确读到文件流的结束了
纠结呀!!!!
服务器端不调用dataout.close(),而是调用socket.shutdownOutput()
首先发送文件的实际大小,比如一个int型或long型
然后读取这个大小的字节数不就好了吗
既然 能抛出sockettimeoutexception异常 说明是java.net 包里面的类出了 问题
所以可以试一试
Socket.setSoTimeout 呵呵 只是个人看法你自己试一试啊
正解,这样就OK了,不用关闭流,3Q