我的程序是这样的
客户端先发送数据给服务器,服务器处理之后返回结果
发送数据是成功了,但是客户端接受数据的时候,我用inputStream = new DataInputStream(client.getInputStream())创建一个输入流
但是却抛出异常,看到异常的解释中说是 socket被关闭了
可是程序中我并没有关闭这个socket呀,而且我也用了判断,如果socket是空的话返回请问这是什么原因阿,请大家帮忙

解决方案 »

  1.   

    public void getMessage(String filepath) {
         DataInputStream inputStream = null; /* serverからデータを読むポイント */
         DataOutputStream fileOut = null;    /* ファイルへ書き込むポイント */        if (client == null){
             return;
            }
            
            try{   
             int bufferSize = 2048;   
                byte[] buf = new byte[bufferSize]; 
                
                inputStream = new DataInputStream(client.getInputStream());          
                fileOut = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(filepath)));
                
                while (true) {   
                    int read = 0;   
                    if (inputStream != null) {   
                        read = inputStream.read(buf);   
                    }    
                    if (read == -1) {   
                        break;   
                    }    
                    fileOut.write(buf, 0, read);  
                }
                System.out.println("savpath = " + filepath + "\n");  
                System.out.println("getMessage success!");
            }catch (IOException ex) {
                System.out.println("getMessage failure!");   
                close();
            }finally{   
                try {   
                 fileOut.close();   
                 inputStream.close();   
                } catch (IOException e) {   
                    e.printStackTrace();   
                }   
            }   
        }
    我的读取数据的函数是这样的
      

  2.   

    “看到异常的解释中说是 socket被关闭了 ”异常的 stackTrace 最好给出来看看。
      

  3.   

    我不知道你传的是些什么东西,但是显然你没有把 DataInputStream 真正用起来,而是把它当 InputStream 用了。同样的 DataOutputStream 也是当 OutputStream 用了。
      

  4.   

    如果连接出现过一次异常,你就会将该连接关闭了,再次获取的时候就失败了System.out.println("getMessage failure!");  
    close(); //这里应该修改成reConnect(); if (client == null){ 
            return; //这里最好改成connect();
            } 
      

  5.   

    stackTrace 打印出来后的信息是java.net.SocketException: Socket is closed〉〉我不知道你传的是些什么东西,但是显然你没有把 DataInputStream 真正用起来,而是把它当 InputStream 用了。同样的 DataOutputStream 也是当 OutputStream 用了。这个有可能我用的不对,我就是想传传字符串而已但是我问的问题跟这个好像是没有关系client这个实体还是存在的,而且之前的代码跟踪每一步,没有出现链接异常按道理来说不会失败才是,继续请教