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,折磨死我了。
急。
谢谢兄弟梦了
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,折磨死我了。
急。
谢谢兄弟梦了
DataInputStream is = receiver;
byte[] data = new byte[512]
我总认为这里应该是抛出异常的,怎么会返回-1?
兄弟
client.setSoTimeout(mm7Config.getTimeOut());
client.setKeepAlive(true);
这是前面的操作
readline = is.read(data);
if ( readline==-1) throw new IOException("Read timeout!!!");
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");
如果大家能肯定的告诉我,我的关于socket读流的看法是错误的,那么我的问题其实也解决了。但是请大家告诉我一些关于socket超时后不抛异常,而是返回-1的权威资料或者实例!
谢谢大家
这是DataInputStream类read方法的说明,当data为空时返回-1(认为读data已经到末尾),和超时无关的。