抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > java socket 重连_java socket 重连问题

java socket 重连_java socket 重连问题

时间:2020-05-04 08:36:10

相关推荐

客户端偶尔会出现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 重连问题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。