java util扫描程序超时?
我有以下问题,我的应用程序中有一个简单的TCP类,它向设备发送一条消息进行查询,然后设备用消息进行响应,但是没有任何描述的行尾字符,因为它来自串行转换器,在最初尝试使用readline函数并发现它在输出前需要eol字符后,我尝试了扫描仪功能,该功能工作正常,除非设备出于某种原因没有响应该请求,否则我的应用程序将冻结,是否可以在扫描仪功能上设置一个超时,这样它就可以断开连接并继续运行,或者有更好的方法来做到这一点?我的代码如下:java util扫描程序超时?,java,java.util.scanner,bufferedreader,Java,Java.util.scanner,Bufferedreader,我有以下问题,我的应用程序中有一个简单的TCP类,它向设备发送一条消息进行查询,然后设备用消息进行响应,但是没有任何描述的行尾字符,因为它来自串行转换器,在最初尝试使用readline函数并发现它在输出前需要eol字符后,我尝试了扫描仪功能,该功能工作正常,除非设备出于某种原因没有响应该请求,否则我的应用程序将冻结,是否可以在扫描仪功能上设置一个超时,这样它就可以断开连接并继续运行,或者有更好的方法来做到这一点?我的代码如下: public String Send_TCP ( InetAddre
public String Send_TCP ( InetAddress IPAddress, int POrt, String InData) throws IOException
{
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
socket = new Socket(IPAddress, POrt);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection");
System.exit(1);
}
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
;
System.out.print("Connected, Sending:"+ InData);
out.println(InData);
System.out.println("Equals");
String str1 = new Scanner(in).useDelimiter(">").next() + ">";
System.out.println(str1);
System.out.println("Equals");
out.close();
in.close();
read.close();
socket.close();
return str1;
}
}
我不确定是否正确理解了您的问题,但您可以在套接字上设置超时:
socket.setSoTimeout(int timeout)
。
请参阅:我相信以下内容可以实现我所需要的,基本上是检查缓冲区是否存在,如果缓冲区不存在,那么它会等待并再次检查,以避免扫描功能的陷阱,如果消息在读取时从未到达
try {
BufferedReader rd = new BufferedReader(new InputStreamReader(sock.getInputStream()));
int count = 1;
do {
if (rd.ready()){
System.out.println ("Response Ready");
str = new Scanner(rd).useDelimiter(">").next()+">";
count = 501;
}
Thread.sleep(10);
System.out.println ("Response Not Ready" + count);
count ++;
} while (count < 25);
试试看{
BufferedReader rd=新的BufferedReader(新的InputStreamReader(sock.getInputStream());
整数计数=1;
做{
if(rd.ready()){
System.out.println(“响应就绪”);
str=新扫描仪(rd).useDelimiter(“>”).next()+“>”;
计数=501;
}
睡眠(10);
System.out.println(“响应未就绪”+计数);
计数++;
}而(计数<25);
谢谢,我现在已经尝试过了,但不幸的是它不起作用,问题是当它击中扫描仪时,如果扫描仪是空的,那么程序会等待,防止套接字在空闲超时时关闭。基本上,我需要的是,如果扫描仪发现缓冲读卡器是空的,那么在停止之前继续检查指定的超时然后关闭连接。