我正在开发一个应用程序,在该应用程序中,我在套接字上写入和读取。但是,它只执行了 11 次任务,然后它就休眠了。
轮询线程.java
public class PollThread {
static String result;
private static Timer myTimer;
static String ip = "192.168.1.19";
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("PollThread");
myTimer = new Timer();
myTimer.schedule(new TimerTask() {
@Override
public void run() {
ClientThread cThread = new ClientThread(ip);
String status = cThread.readStatus();
System.out.println("Staus :: "+status);
}
}, 0, 2000);
}
}
ClientThread.java
public class ClientThread {
String byte_to_hex, swapped_result, result,ipAddr;
public Socket s;
public InputStream i;
public OutputStream o;
int status;
public ClientThread(String ip) {
// TODO Auto-generated constructor stub
this.ipAddr=ip;
}
public int readStatus() {
try {
s = new Socket(ipAddr, 502);
i = s.getInputStream();
o = s.getOutputStream();
byte[] data1 = new byte[1024], packet1 = { (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x06, (byte) 0x01, (byte) 0x01, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x19 };
o.write(packet1);
i.read(data1, 0, 1024);//Comment this
byte_to_hex = bytesToHex(data1).substring(18, 26);
char[] arr = byte_to_hex.toCharArray();
for (int i = 0; i < arr.length - 1; i += 2) {
char temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
swapped_result = new String(arr);
result = hexStringToNBitBinary(swapped_result, 32);
int counter = 0;
for (int i = 0; i < result.length(); i++) {
if (result.charAt(i) == '1') {
counter++;
}
}
status = counter;
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return status;
}
}
结果
Staus :: 1
Staus :: 1
Staus :: 1
Staus :: 1
Staus :: 1
Staus :: 1
Staus :: 1
Staus :: 1
Staus :: 1
Staus :: 1
Staus :: 1
如果我注释掉,i.read(data1, 0, 1024);
那么它工作正常,但我需要这一行来获得结果。
这可能是什么问题?为什么它只运行了 11 次?
更新-1
Reading status...
Status :: 1
Reading status...
Status :: 1
Reading status...
Status :: 1
Reading status...
Status :: 1
Reading status...
Status :: 1
Reading status...
Status :: 1
Reading status...
Status :: 1
Reading status...
Status :: 1
Reading status...
Status :: 1
Reading status...
Status :: 1
Reading status...
Status :: 1
Reading status...
更新 2
我也试过 cThread.start();
在PollThread.java
文件中添加这一行,但结果是一样的。