Lesen Sie Zeilen von Socket aus und setzen Sie jeden in Blockierung
-
27-10-2019 - |
Frage
Kann jemand Beispiele in Java angeben oder eine Klasse implementieren, die asynchron Zeilen aus einer Steckdose liest und jede Zeile in einen Blockierqueue einbringt. Angenommen, die Steckdose ist angeschlossen und der Blockierqueue und der Verbraucher existieren bereits.
Bearbeiten: Eine weitere Sache, es muss nach einer Zeit der Inaktivität die Möglichkeit haben, eine Auszeit zu erzielen, und sofort auf dem Befehl anhalten.
Es sind keine Hausaufgaben, ich konnte einfach keine vollständigen Beispiele dafür finden, wie es gut geht, und zuverlässig.
Vielen Dank.
Lösung
Sie klingen so, als hätten Sie die Arbeit bereits erledigt, um ehrlich zu sein. Alles, was Sie tun müssen, ist ein Blockingqueue zu erstellen und einen Thread zu verarbeiten, der Ihr Verbraucher ist, denke ich. Angenommen, Sie haben einen DataNputStream 'in' ...
Etwas wie das:
BlockingQueue<String> receivedQueue = new LinkedBlockingQueue<String>();
public void run()
{
while (true)
{
try
{
receivedQueue.put(in.readUTF());
} catch (EOFException e)
{
ch.getClient().disconnect();
break;
} catch (IOException e)
{
break;
} catch (InterruptedException e)
{
break;
}
}
theQueueProcessor.interrupt();
}