private DataInputStream receiver;
receiver = new DataInputStream(client.getInputStream());
 while (1 > 0) {
         if (flag) {
            break;
         }
         readline = is.read(data); //这里返回-1,data为空
         logger.debug("httpRead() 222222");
         baos.write(data, 0, readline);//导致这里出异常
         logger.debug("httpRead() 666666");
我只知道,网络流读不到就阻塞,阻塞超过我设置的超时时间(5秒)之后就抛异常,怎么会返回-1,折磨死我了。
急。
谢谢兄弟梦了

解决方案 »

  1.   

    错了;
    DataInputStream is = receiver;
    byte[] data = new byte[512]
    我总认为这里应该是抛出异常的,怎么会返回-1?
    兄弟
      

  2.   

    client = new Socket(ip, port);  
    client.setSoTimeout(mm7Config.getTimeOut());
      client.setKeepAlive(true);
    这是前面的操作
      

  3.   

    奇怪啊,怎么这么少兄弟来光顾啊,jsp板块不是好火的码
      

  4.   

    设置的超时如果没有返回数据当然返回-1, 表示没有读到数据.要抛出异常判断一下
    readline = is.read(data);
    if ( readline==-1) throw new IOException("Read timeout!!!");
      

  5.   

    好,立即就贴。关键是我的代码其实分得很散,大家看起来会很麻烦。对socket都进行了封装。我怕弟兄们懒得看
      

  6.   

    String MMSCIP = (String) mm7Config.getMMSCIP().get(0);
                int index = MMSCIP.indexOf(":");
                String ip;
                int port;
                if (index == -1) {
                   ip = MMSCIP;
                   port = 80;
                } else {
                   ip = MMSCIP.substring(0, index);
                   port = Integer.parseInt(MMSCIP.substring(index + 1));
                }
                client = new Socket(ip, port);
             }
             if (client != null) {
                logger.debug("here5 ,client != null");
                client.setSoTimeout(mm7Config.getTimeOut());
                client.setKeepAlive(true);
                sender = new DataOutputStream(client.getOutputStream());
                receiver = new DataInputStream(client.getInputStream());
    while (1 > 0) {
             if (flag) {
                break;
             }
             readline = is.read(data); //这里返回-1,data为空
             logger.debug("httpRead() 222222");
             baos.write(data, 0, readline);//导致这里出异常
             logger.debug("httpRead() 666666");
      

  7.   

    to “ TinyJimmy(Jimmy)”,我觉得我现在的关键问题是:以前我一直以为超时之后只会抛出异常,而不会返回-1,并且我的一个朋友也这样认为,关于socket的文档,尤其是关于setSoTimeout()这个函数的说明文档 都是这样说的。
    如果大家能肯定的告诉我,我的关于socket读流的看法是错误的,那么我的问题其实也解决了。但是请大家告诉我一些关于socket超时后不抛异常,而是返回-1的权威资料或者实例!
    谢谢大家
      

  8.   

    the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached. 
    这是DataInputStream类read方法的说明,当data为空时返回-1(认为读data已经到末尾),和超时无关的。