2016-05-19 16 views
1

Ich frage mich, wie das funktioniert, senden: https://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html#readUTF()Wie verschiedene Arten von Daten über den gleichen Sockel

Wenn wir ein Dataoutputstream zu writeUTF("dog") und writeUTF("cat") verwenden, readUTF() einmal ‚Hund‘ nicht genannt bekommen und riefen dann ein zweites Mal bekomme 'Katze'?

Auch, was ist der beste Weg, dies zu erreichen (von diesem Code: https://github.com/richardrl/downloader/tree/master/src/main/java): Ich habe eine Datei auf 1 von N Servern. Ich lasse den Client einen der Server abfragen. Wenn es nicht auf dem Server ist, möchte ich, dass der Client die Datei von dem richtigen Server in höchstens 2 Anfragen herunterlädt.

Mein Plan ist jetzt, eine hashmap (von allen Dateien über alle Server) zu haben, die jede Datei der Portnummer und dem Domainnamen des Servers zuordnet, auf dem sie sich befindet (die zwei Eigenschaften, um einen Server-Socket zu finden). Wenn der Client von einem Server anfordert, sucht der angeforderte Server die Hash-Datei für die Datei. Wenn der aktuelle Server nicht auf dem aktuellen Server gefunden wird, sendet er einen Fehler (derzeit ausgeführt von writeBoolean(false)) und dann die Portnummer und den Domänennamen des richtigen Servers, der die Datei enthält.

Mein aktuelles Problem ist, dass ich NoRouteToHostException durch den folgenden Prozess bekomme.

  1. Clone alle Dateien hier: https://github.com/richardrl/downloader/tree/master/target/classes

  2. Gehen Sie in "dummyserver" Ordner und geben Sie im Terminal: 'java dlserver 1124' Server zu starten. Wie Sie sehen, befindet sich die angeforderte Datei "dummy.txt" im selben Ordner wie dieser Server.

  3. Gehen Sie eine Ebene zurück und geben Sie ein: 'Java DLServer 4444'.

  4. Geben Sie nun 'java DownloaderClient localhost 4444' ein, um den Client zu starten. Geben Sie "dummy.txt" ein, um "dummy.txt" anzufordern. Statt auf die dummyserver richtig verbinden, bekomme ich diesen Fehler:

    java DownloaderClient localhost 4444 In while-Schleife dummy.txt Auftraggeber: dummy.txt Exception in thread "main" java.net.NoRouteToHostException: Can‘ t assign angeforderte Adresse bei java.net.PlainSocketImpl.socketConnect (native Methode) bei java.net.AbstractPlainSocketImpl.doConnect (AbstractPlainSocketImpl.java:339) bei java.net.AbstractPlainSocketImpl.connectToAddress (AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect (AbstractPlainSocketImpl.java:182) bei java.net.SocksSocketImpl.connect (SocksSo cetImpl.java:392) bei java.net.Socket.connect (Socket.java:579) bei java.net.Socket.connect (Socket.java:528) bei java.net.Socket. (Socket.java . 425) bei java.net.Socket (Socket.java:208) bei DownloaderClient.main (DownloaderClient.java:21)

+0

bump bump bump b – Richard

Antwort

0

bin ich ein wenig verwirrt darüber, was Ihre fragen, so dass ich Ich werde versuchen, die Frage im Titel zu beantworten. Für die kurze Zeit, die ich Java-Sockets verwendet habe, habe ich jedes Mal, wenn ich Daten gesendet habe, die Daten in ein Array von Bytes umgewandelt und dann ein Byte im ersten Index hinzugefügt, um zu bestimmen, wie das Byte-Array interpretiert werden soll . Überprüfen Sie hier, wie Sie das tun - http: // stackoverflow.com/questions/18571223/How-to-Konvertieren-Java-String-in-Byte

Ich bin mir nicht sicher, ob dies Ihre Frage beantwortet, aber vielleicht kann dies helfen.

Verwandte Themen