你应该是用InputStream来接收socket数据;
调用read方法的时候,需要捕获异常,同时还需要保存返回值。有两种情况:
1.如果捕获到异常,说明接收超时了;
2.如果read()方法的返回值为-1,说明连接已经断开; int bytesRead = 0;
byte receiveBuffer[] = new byte[1024];
try {
bytesRead = inputStream.read(receiveBuffer, 0, 1024);
} catch (InterruptedIOException e) {
// 接收超时了
// do something
} if (bytesRead < 0)
{
// socket连接已经断开
// do something
}
解决方案 »
- Java调用文件打开框的疑问(个人觉得很有必要)
- 求高手指点
- 做一个像土豆网的视频网站,用JAVA技术采用的架构
- 我想做一个个类似飞鸽一样的软件,实现公司内部人员的聊天(单聊和群聊),以及任何格式的文件的传输
- 如何用socket来获取网页的内容(包括网页上的图片)?
- 可以在继承JPanel的类中在public void paintComponent(Graphics g)方法中添加背静图片吗?(应用程序中)
- 我的一个工程有很多不同的包当然也放在不同的目录中,用javac如何便宜
- 调查:你所在的软件企业盈利情况调查。
- 请问为什么我的corba程序在两个机器上不能运行,很急的问!!
- 关于CachedRowSet的疑问
- 怎么不让JFrame不响应鼠标点最小化,最大话按钮啊?
- 请高手Swing看一下
public int readPa(conn_desc con) {
String number = null; //手机号;
String smtxt = null; //短信内容; cmppe_result cr = null; int result = 0; try {
cr = cmpp.readResPack(con);
result = cr.stat; switch (cr.pack_id) {
case CMPP.CMPPE_NACK_RESP:
logger.debug("get nack pack");
break; case CMPP.CMPPE_LOGIN_RESP:
cmppe_login_result cl;
cl = (cmppe_login_result) cr;
logger.debug("ogin resp: STAT = " + cl.stat);
break; case CMPP.CMPPE_LOGOUT_RESP:
logger.debug("logout resp: STAT = " + cr.stat);
break; case CMPP.CMPPE_DELIVER:
cmppe_deliver_result cd = (cmppe_deliver_result) cr;
number = new String(cd.src_addr, 0, 11); //源手机号码; //将短信内容解码出来。
int sm_len = cd.sm_len; if (sm_len < 0)
sm_len = 256 + sm_len; switch (cd.data_coding) {
case 0x08:
smtxt = new String(cd.short_msg, 0, sm_len, "UnicodeBig");
break;
case 0x15:
smtxt = new String(cd.short_msg, 0, sm_len, "GB2312");
break;
case 0x00:
smtxt = new String(cd.short_msg, 0, sm_len, "8859_1");
break;
default:
smtxt = new String(cd.short_msg, 0, sm_len, "UnicodeBig");
break;
}
cmpp.cmpp_send_deliver_resp(con, cd.seq, cd.stat);
insertTable(number, smtxt, mediaInfo.getMediaId());
logger.debug("deliver: STAT = " + cd.stat);
break; case CMPP.CMPPE_CANCEL_RESP:
logger.debug("cancel: STAT = " + cr.stat);
break; case CMPP.CMPPE_ACTIVE_RESP:
logger.debug("active resp: STAT " + cr.stat);
break; default:
break; }
}
catch (UnknownPackException e) {
result = -11111;
}
catch (DeliverFailException ee) {
result = -22222;
}
catch (EOFException eee) {
result = -33333;
}
catch (Exception e4) {
result = -44444;
}
return result;
}但是他的api上又没有超时的设置的, 很奇怪的?
如果连接不上,就先退出了。
判断是否处于连接状态的方法JAVA里提供了,你可查一下帮助。