Je travaille sur un terminal Ingenico pour le traitement des transactions. J'utilise des sockets et des ports série pour communiquer avec le serveur principal. Le port série et le port série communiquent entre eux, c'est-à-dire que toutes les données reçues sur le port série sont immédiatement écrites sur le flux de sortie de la prise et toutes les données reçues sur la prise sont écrites sur le port série. Par exemple: lorsque le socket envoie un message au port série, le port série répond avec un accusé de réception dans un certain nombre de millisecondes puis le port série envoie un autre message. à la prise et vice versa.Java: Pouvons-nous lire avec et sans timeout à partir d'un port série en utilisant les conditions?
J'ai besoin d'un mécanisme de temporisation qui vérifie si je reçois un ACK dans un certain délai (quelques millisecondes). J'ai utilisé Timer et TimerTask pour ce faire. Et j'ai une lecture conditionnelle du port série pour le faire. Ma question est si cela va fonctionner? Suis-je sur la bonne voie?
codejusqu'à présent:
public void serialEvent(SerialPortEvent event)
{
byte[] BytesFromSerialPort = null;
//timeout of 500ms to get either an ACK or NAK from the serial port or the socket on port 6000
int timeout = 10;
if(event.isRXCHAR() && event.getEventValue() > 0)
{
BytesFromSerialPort = new byte[event.getEventValue()];
try
{
if(IsAckExpected)
BytesFromSerialPort = serialPort.readBytes(event.getEventValue(), 1000*timeout);
else
BytesFromSerialPort = serialPort.readBytes(event.getEventValue());
//print statements
System.out.printf("SERIAL RX %04d: ", event.getEventValue());
for(byte b : BytesFromSerialPort)
System.out.printf("%c", (char)b);
System.out.println();
}
}
La condition: Si le message suivant est prévu un ACK alors je fixe un délai d'attente sur elle.
Vous n'avez pas besoin de 'Timer' ou de' TimerTask' lorsque vous avez déjà un mécanisme de lecture avec délai que vous utilisez déjà. Pas clair ce que vous demandez. – EJP
Je dois définir un délai d'attente uniquement lorsque le socket est sur le point de recevoir un ACK du port série et vice versa. Je n'ai pas besoin d'un mécanisme de temporisation lorsque le socket et le port série communiquent avec d'autres messages. L'utilisation du mécanisme de temporisation de JSSC imposera un délai à toutes les lectures, ce que je ne veux pas. – user3754878
Je comprends. Je n'ai pas besoin d'une tâche de minuterie. Mais le code suivant va-t-il fonctionner? Pouvons-nous définir des délais d'attente différents pour les lectures de socket en fonction des conditions? – user3754878