客户端偶尔会出现read阻塞的情况,加上setSoTimeout后,会抛出读取超时异常,引起read阻塞的原因未查明。在捕获异常后关闭连接,重新连接后read时仍然会出现读取超时,只有重启程序后...
客户端偶尔会出现read阻塞的情况,加上setSoTimeout后,会抛出读取超时异常,引起read阻塞的原因未查明。在捕获异常后关闭连接,重新连接后read时仍然会出现读取超时,只有重启程序后才会正常,服务端未做任务处理,请问是什么原因能导致只有重启客户端程序才能read,而重新连接却不行,请高手赐教,提供解决办法,谢谢
private String sendCommand(String command) {
StringBuffer sb;
try {
out.write(command.getBytes("utf-8"));
out.flush();
byte[] b = new byte[1000];
sb = new StringBuffer();
int length = -1;
while ((length = in.read(b)) > 0) {
// 获得消息
String message = new String(b, 0, length, "UTF-8");
sb.append(message);
if (message.indexOf("") != -1) {
System.out.println("收到消息:" + sb.toString());
return sb.toString();
}
}
return null;
} catch (Exception e) {
e.printStackTrace();
close();// 关闭连接
open();// 重新连接
return sendCommand(command);
}
}
public void close() {
try {
if (in != null)
in.close();
if (out != null)
out.close();
if (socket != null)
socket.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
private void open() {
try {
socket = new Socket(ip, port);
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
reset();// 重置RFID
} catch (Exception e) {
System.out.println("RFID连接断开Ip:" + ip + "-Port:" + port);
close();// 关闭连接
open();// 重新连接
}
}
public boolean reset() {
boolean result = false;
for (int i = 0; i < maxResetTimes; i++) {
String msg = "0025000000010001";// 启动rfid命令
boolean response = getResponseCode(sendCommand(msg));
if (response) {
return result = true;// 启动成功返回
}
}
if (!result) {
JOptionPane.showMessageDialog(ControlSystem.main, "ip:" + ip + "-port:" + port + "RFID启动失败,请确保串口工具已开启!");
logger.error("ip:" + ip + "-port:" + port + "尝试次启动通信失败!");
}
return result;
}
展开
如果觉得《java socket 重连_java socket 重连问题》对你有帮助,请点赞、收藏,并留下你的观点哦!