Ich versuche, ein Java-Programm für Windows zu schreiben, die Kommunikation mit einem Server-Programm auf einem fremden Rechner beteiligt.Mein Programm erfolgreich mit dem Server verbindet, schreibt erfolgreich ein Byte-Array und wartet auf eine Antwort.Java-Client-Server senden Bytes Empfänger hört unbegrenzt
Ich weiß, dass der Server Bytes (die Antwort) zurück zu mir Byte für Byte druckt. Ich habe versucht, ein DataInputStream-Objekt mit verschiedenen Methoden (lesen, readByte usw.), ich habe versucht, ein BufferedReader-Objekt mit seinen Methoden (lesen, readLine usw.), aber alle Reader-Objekte und verschiedene Methoden, die ich verwendet habe Alle haben das gleiche Problem.
Die Bytes werden erfolgreich gelesen (jedes Mal, wenn ein Byte oder Bytes gelesen werden, kann ich sie auf die Konsole drucken, und sie sind das, was ich von ihnen erwarte). Das Problem ist, dass mein Leser nicht weiß, wann er aufhören soll zu lesen. Selbst wenn der Server alle seine Bytes gesendet hat, wartet die Reader-Funktion an meinem Ende auf unbegrenzte Zeit auf mehr Daten, und so hängt das Programm an der Lesefunktion.
Dieses Problem scheint alle Techniken zu beeinflussen, die ich ausprobiert habe. Ich habe Tests mit einem einfachen Client-Programm und einem Server-Programm durchgeführt, die jeweils etwa 40 oder 50 Zeilen lang sind, wobei der Client sich mit dem Server verbindet und einige Bytes dorthin sendet. Alle Techniken, die ich für den Serverleser ausprobiert habe, führen zu dem gleichen Problem, das oben erwähnt wurde (der Server hängt sich ab und wartet auf weitere Eingaben vom Client, obwohl er alle seine Daten gesendet hat).
Ich bin wirklich verzweifelt für etwas Hilfe zu diesem Thema. Es ist wichtig, dass ich dieses Programm in Kürze fertigstelle, und es ist im Wesentlichen komplett, abgesehen von diesem Kommunikationsproblem. Jede Hilfe wird sehr geschätzt!
-ROB
--EDIT--
Am Ende I für einen Algorithmus siedelt, die das Lesen der Bytes endet durch die Anzahl der Nachrichtensegmente zu verfolgen, die gelesen worden sind (Segmente Begrenzt durch zwei Nullwerte: 00) und vergleichen Sie das mit der Anzahl der erwarteten Segmente (übergeben an die Lesefunktion als Argument). Es ist keine ideale Methode, aber es funktioniert, und ich habe keine Zeit mehr, an dem Programm zu arbeiten.
Vielen Dank für Ihre Hilfe!
Schließen Sie Ihre Streams? – npinti
Ich habe versucht, das Writer-Objekt auf dem Client-Ende nach dem Senden der Daten in den Client-Server-Testprogrammen zu schließen, und es funktionierte, aber der Server verursachte dann eine Laufzeitausnahme, die besagt, dass die Verbindung geschlossen wurde, als es versuchte, ein DataOutputStream-Objekt zu erstellen um eine Antwort an den Kunden zu schreiben. Aber im eigentlichen Programm, das ich schreiben möchte, habe ich keine Kontrolle darüber, was der Server macht oder nicht tut. – Rob
Auch das Senden der Länge der Daten im Voraus ist keine Option, da der Server, den ich kontaktiere, dies nicht tut, und ich habe keine Kontrolle über den Servercode. – Rob