2012-10-09 13 views
9

Ich versuche, ein sehr einfaches Socket-Programm zu schreiben, was ich im Grunde will, ist, dass der Client für die Kommunikation vom Server, in einer Weile (wahr) Schleife. Jetzt möchte ich auch, Client in der Lage sein, einige Daten zurück zum Server in der Mitte des Abhörens zu senden.Socket lesen und schreiben gleichzeitig

Die einzige Lösung, die ich mir vorstellen kann, ist das Erstellen eines Threads für das Lesen und Schreiben, und das Unterbrechen des Lese-Thread jedes Mal, wenn ich einen Schreibvorgang machen muss.

gibt es eine bessere Lösung oder ist dies die einzige Art, wie ich diese

+1

Bearbeiten Sie Ihren Beitrag, um weitere Details zu Ihrer Arbeit zu erhalten. Was hast du probiert? Welche Forschung hast du gemacht? Welcher Code funktioniert nicht? – Gray

+1

Es ist einfach kein Problem - siehe @CrazyCasta Antwort. Tx/rx-Streams sind unabhängig und werden von einem Thread gelesen, während der Schreibvorgang von einem anderen Thread in Ordnung ist. –

+0

R/W gleichzeitig ist die Definition von Vollduplex, die TCP ist. – irreputable

Antwort

6

tun können Sie zwei Threads verwenden können. Eine zum Lesen und eine zum Schreiben. Auf diese Weise kann der Schreib-Thread schreiben, wann immer es ihm gefällt (muss das Lesen nicht stoppen).

Eine andere Möglichkeit ist es, setSoTimeout(timeoutMs) auf dem Socket vor dem Aufruf von lesen zu verwenden. Dies wird dazu führen, dass es eine SocketTimeoutException wirft, wenn es länger dauert als timeoutMs Millisekunden zu lesen, so dass Sie dann schreiben können, wie Sie möchten.

+1

Dem würde ich zustimmen, abgesehen vom Timeout-Teil. Warum willst du das? Du kannst trotzdem schreiben. –

+0

@TobiasRitzau Ermöglicht Ihnen, einen Thread anstelle von zwei zu verwenden. Ich bin mir nicht ganz sicher, was das OP versucht, also habe ich gerade eine andere Option hinzugefügt. – CrazyCasta

+2

Es gibt einige schwerwiegende Synchronisierungsprobleme, die sich daraus ergeben können. Und wenn Sie eine Zeitüberschreitung haben, ist die Steckdose geschlossen, oder fehlt mir etwas? –

-1

Sie können zwei verschiedene Ports verwenden, einen zum Abhören und einen zum Schreiben. und verwenden Sie verschiedene Threads, um die Operationen auszuführen, während Sie während der (echten) Schleife kein Problem erzeugen.

+2

Das macht ein Socket ... Es unterstützt bereits Vollduplex. –

0

Werfen Sie einen Blick auf die FTP-Protokoll-Spezifikationen. Es macht, was Sie beabsichtigen zu tun mit zwei Socket/Kanäle, einen für Befehle und einen für Daten.

+1

Das wird nicht benötigt. Ein Socket reicht zum Senden und Empfangen auf zwei separaten Kanälen. –