我使用java.net编写一个文件传输服务器,需要接受客户端发送过来的文件,文件接受完毕过后,在给客户端发送一个ok的确认信息,结果出现了一个如下的问题:
客户传输一个文件过后,在随后使用
byte returnvalue[]=new byte[10];
int len=in.read(returnvalue);
接受服务器确认的信息时,却在服务器端老实出现接收阻塞,既num = in.read(buf);一直阻塞,无法得到-1结束的信息,并且一个在等待》
请问该如何处理
 

解决方案 »

  1.   

    你這個最大的可能性就是客戶端在接收完數據后,程序性的把SOCKET關閉了
    你檢測一下這個
    我遇到個這樣的問題
      

  2.   

    看看是不是没有把缓冲区flush了,这个是在关闭前强制输出所有的数据,呵呵~~~~
      

  3.   

    //接受文件大小
    long filelength=objectis.readLong();
    //接受文件内容流
    File file=new File(userfolder,contenttype+"/preview/"+previewfilename);
    FileOutputStream fos=new FileOutputStream(file);
    byte[] buffer = new byte[1024];
    long nowrecieve=0;
    int size=0;
    if(filelength>0)
    while (nowrecieve<filelength)
    {
    size=is.read(buffer);
    nowrecieve+=size;

    fos.write(buffer, 0, size);
    }
    System.out.println("正常退出");
      

  4.   

    只有你的客户端传完后,断开SOCKET,你的服务器SOCKET才会收到-1
      

  5.   

    socket问题
    http://community.csdn.net/Expert/topic/4654/4654417.xml?temp=.981106
    着急呀,大家帮忙解决,谢谢
      

  6.   

    Java I/O是阻塞模式的,只有一端关闭socket,才会read出-1,但是,read到10可能吗?不是就发送一个OK吗,你数数看这个OK有多少个byte,read = 2你就不应该再read了,否则,必定阻塞无疑。要不就让客户端用空格填充发送buffer,服务器这面就可以成功read 10个,然后,trim掉空格即可。
      

  7.   

    你的服务器端先把in关闭,然后再发送试试,我倒是没遇到过这样的问题
    我是这样做的
    while( in.read(buf)>0){
    //do something
    }
    //这里开始处理发送OK,但先关闭IN,
    in.flush();
    in.close();