我只知道,网络流读不到就阻塞,阻塞超过我设置的超时时间(5秒)之后就抛异常,怎么会返回-1,折磨死我了。
急。
谢谢兄弟梦了
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");
急。
谢谢兄弟梦了
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");
如果大家能肯定的告诉我,我的关于socket读流的看法是错误的,那么我的问题其实也解决了。但是请大家告诉我一些关于socket超时后不抛异常,而是返回-1的权威资料或者实例!
谢谢大家
to :“ dytsoft(anway.vicp.net)”兄弟,客服说详细一点?
我觉得我现在的关键问题是:以前我一直以为超时之后只会抛出异常,而不会返回-1,并且我的一个朋友也这样认为,关于socket的文档,尤其是关于setSoTimeout()这个函数的说明文档 都是这样说的。
如果大家能肯定的告诉我,我的关于socket读流的看法是错误的,那么我的问题其实也解决了。但是请大家告诉我一些关于socket超时后不抛异常,而是返回-1的权威资料或者实例!
谢谢大家
“ Creates a stream socket and connects it to the specified port number on the named host.”这是sun文档对这个socket构造函数的说明,为何在读的时候还会未连接呢?如果不能连接,那么在构造这个socket的时候就会有异常,我会在函数外捕捉到的
当底层的socket已经关闭时,在它上面调用read方法,不会抛出connection reset 异常,而是返回-1?
晕死,这些重要的细节怎么sun的文档上都没有提到呢,
他给出的例子的一部分就是服务器端如果读到-1就表示客户端已经断开。jinxfei(周华健、言兴朋、茅威涛) ( ) 正解
还想并且需要听听其它哥们的说法。tmd,我们公司一些成熟的通讯程序源码都是只捕捉异常而没有根据-1来判断socket不能读了。
等候大家的解释
int dataTotalSizeToRead = dataSize - 4;
int dataToReadLeft = dataSize - 4;
int dataThisTimeRead; while (dataToReadLeft > 0) {
dataThisTimeRead = dataInStream.read(receivedData,
dataTotalSizeToRead -
dataToReadLeft,
dataToReadLeft);
dataToReadLeft -= dataThisTimeRead;
...........
这是我们一个较大的通讯平台上运行了7,8年之久的代码。我真的无语,如果不抛异常而返回-1,那么就是这段代码带着毛病支撑了我们的平台差不多十年吗
弟兄们,欢迎点评...请解我的疑或!!!!!
我不是死抠,我是真的需要知道真相,我觉得难以理解。
socket client = new Socket(ip,port);
client.setSoTimeout(10000);
DatainputStream dataInStream = new DatainputStream(client.getInputStream);
..........
int dataTotalSizeToRead = dataSize - 4;
int dataToReadLeft = dataSize - 4;
int dataThisTimeRead; while (dataToReadLeft > 0) {
dataThisTimeRead = dataInStream.read(receivedData,
dataTotalSizeToRead -
dataToReadLeft,
dataToReadLeft);
dataToReadLeft -= dataThisTimeRead;}catch....
这样代码还少吗,从创建socket开始,难道还有别的地方会影响吗,兄弟?
dataInStream.read(receivedData,
dataTotalSizeToRead -
dataToReadLeft,
dataToReadLeft);
会否返回-1?什么时候返回-1?
没有连接上返回-1还是抛异常?
读的时候断开了是返回-1还是抛异常?
超时时间到了之后还没读到,是否返回-1还是抛异常?
真成的谢谢
如果用DataInputStream读文件或其它非socket流,我一直以是否-1来判断是否到尾了。
可是,读socket流怎么会 at end of file ?
另外,如果没有连上,new Socket的时候就会抛出异常,当然也就不可能拿到inputStream了。