你既然设了超时,那么过了m_iTimeout没收到数据就会
抛出timeout 异常了。顺便说下,
你上面的代码即使在正常情况下也会有问题,
读流的数据一般是这样读的。while(in.read(data, 0, data.length)!= -1){
  // 针对data 做某种操作,比如写到另一输出流中去
}

解决方案 »

  1.   

    楼上好,当传输的数据量较大时用in.read(data, 0, data.length)是一下子读不完的,它的返回值是这一次读了多少个字节,所以得作个循环,让它读完为止。还有我作了个测试,当输入流没有数据时in.read(data, 0, data.length)的返回值是零而不是-1.
      

  2.   

    超时会抛出一个异常:SocketTimeoutException
      

  3.   

    传输方式个人觉得还是用标准的HTTP协议在socket中传输,这样你通过查找HTTP协议头中Content-Length的大小可以知道传输内容的大小,就可以不断读取至到读取完整,否则你怎么知道是一个完成的内容?如果在Socket通道中堆积了几段信息,你又怎么去区分?
      

  4.   

    用线程,再设定一个开关参数,执行一次sleep一下;socket一方关闭后就断了。