服务器端:
OutputStream netOut=clientSocket.getOutputStream();
OutputStream doc=new DataOutputStream(new BufferedOutputStream(netOut));
.......省略读取文件发送到客户端的代码
doc.close();//这样会关闭socket连接,没有这句客户端的while(num!=(-1))不会成立,会一直等待服务器发数据客户端:
InputStream netIn=socket.getInputStream();
InputStream fileIn=new DataInputStream(new BufferedInputStream(netIn));
byte[] buf=new byte[2048];
int num=fileIn.read(buf);              
System.out.println("开始写入");
while(num!=(-1))
{//是否读完所有数据
raf.write(buf,0,num);//将数据写往文件
raf.skipBytes(num);//顺序写文件字节
num=fileIn.read(buf);//继续从网络中读取文件
}
fileIn.close();
raf.close();
-------------------------------------------
-------------------------------------------
-------------------------------------------
就是这句doc.close();//这样会关闭socket连接,没有这句客户端的while(num!=(-1))不会成立,会一直等待服务器发数据
怎么样啊,怎么让socket连接不能端,客户端又能知道服务器已经发完数据了.

解决方案 »

  1.   

    那还不简单,双方设置个标志,如-1,收到就服务器已经发完数据了.
    但好象不标准,最好关闭socket.
      

  2.   

    测什么啊怎么设标志啊,如果文件里本来含有这个标志呢
    socket不能关啊,还有其他要传输的
      

  3.   

    本来这个做法就不标准,那更好的这样,服务器先发个长度数据,表示要传送多少数据. 客户得到后就用这个长度来比较读到的数据.
    象我以前做的C项目里很多是这样的.
    struct A
    {
       int lengh_data;  //要发送的长度
       char data[1];    //要发送的数据
    }
      

  4.   

    问东西之前先要自己思路清楚,知道吗?我问你num!=(-1)是什么意思?
      

  5.   

    num!=(-1)代表缓冲区没数据了,返回-1
    我也想不通,为什么缓冲区没数据了,还不会返回-1,一定要socket关闭
    测试很多次了
      

  6.   

    是卡在这个地方了
    num=fileIn.read(buf);
    不光闭链接,就会一直等待.难道要再开一个专门传输文件的socket的链接吗
    有没办法在此链接的基础上,不断开的情况下,传输一个文件另外还有一个问题在eclipse里怎么调试带参数的程序,比如这样java server 2000
    有没办法一起调试两个程序,像这样c/s的程序
      

  7.   

    num=fileIn.read(buf);如果此时已经读不到任何数据了,程序将在这里阻塞,一直到有数据为止。所以说你的程序要修改下。