java串口通信多线程的数据收发问题
大家好,我现在做一个串口通信的项目,有一个主机和一个从机,通过串口来通信,我这里是从机,主机或从机向对方发送一个请求,这个请求里会带1个ID号,用来标明该请求的序号,接受方收到这个请求后,都需要回应一个ACK响应,ACK里边包含这个请求的ID号,来向发送方标明已经收到这个请求。有以下两种可能:
情况1:从机向主机发送一个请求,并且需要主机回应一些数据。图示如下:
在这种情况下:从机先向主机发送一个ID=1的请求,然后主机向从机回复ACK(id=1),向从机说明收到了这个请求,此时从机需要先等待主机的ACK响应,如果从机没有收到主机的ACK(ID=1),则从机重新向主机发送ID=1的请求,只到收到主机的ACK。然后主机再向从机回应ID=1的请求所需要的数据(ID=2),同理,从机收到数据后也需要向主机回应一个ACK(ID=2).
情况2:主机向从机发送状态改变,但是从机不知道主机什么时候会发这个信息,所以从机需要一直能够接收到主机的信息。
图示如下:
我原先设计的思路是:创建一个子线程,在子线程中使用read函数来接收串口的数据,这样可以保证我能收到主机任何时候发送过来的数据。
接收数据的子线程代码:
/** * 该线程用来接收串口收到的信息 */ private class ReadThread extends Thread { @Override public void run() { super.run(); while(!isInterrupted()) { int size; try { if (mInputStream == null) return; size = mInputStream.read(serialBuffer); if (size > 0) { onDataReceived(new String(serialBuffer, 0, size)); } } catch (IOException e) { e.printStackTrace(); return; } } } }