c++ server htons java ntohs client-Konvertierung
Ich bin ein kleines TFTP-client
server app-server entwickelt
mit c++ und client mit java.
Hier bin ich senden "block count" - Wert
mit htons
Konvertierung.
Aber ich bin nicht in der Lage, es zu konvertieren zurück
auf seinen ursprünglichen Wert an den client.
Zum Beispiel, wenn am sendenden block count
ntohs(01)
(2 bytes) vom server zu
client. Client ist zu Lesen in Byte.
Die Bedeutung, die ich erhalte ist byte 0
und byte 1.
Bitte, wenn jemand kann bieten
Lösung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nehme an, Sie meinte, dass Sie verwenden
ntohs
zu decodieren die Werte Lesen aus dem Netz, undhtons
zu Kodieren die Werte über das Netzwerk gesendet.Blick in
ByteBuffer#getShort()
im Konzert mitByteBuffer#order(ByteOrder)
. Network-byte-order ist big-endian -, so verwenden Sie den WertByteOrder#BIG_ENDIAN
konfigurieren Sie IhrByteBuffer
richtig. Beachten Sie, dassBIG_ENDIAN
ist die Standard-Reihenfolge, aber in diesem Fall wäre es eine gute form zu geben Sie Ihre jeweilige Präferenz explizit.Du nicht erwähnen, was Sie verwenden für Netzwerk-Kommunikation in Java. Wenn es ein
java.net.Socket
sind, können Sie anrufenSocket#getChannel()
zu bekommenjava.nio.channels.SocketChannel
, der ein Untertyp vonjava.nio.channels.ByteChannel
mit, die Sie verwenden könnenByteBuffer
Lesen und schreiben von Daten.Java-Nummern intern immer in Netzwerk-byte-Reihenfolge, auch auf Systemen, auf denen der native Integer/doubles sind nicht. Dies bedeutet, dass Sie können konvertieren beliebiger Anzahl kommen in Java mit einem der Basis-input-streams, die diese Art der Konvertierung implementieren java.io.DataInput. ByteBuffer funktioniert auch, wenn Sie einen java.nio.Kanal, sondern dort können Sie die endianness (
ByteBuffer.order()
), obwohl die Standardeinstellung ist die richtige für Netzwerk-byte-Reihenfolge und Java interner Speicher.Durch die Art und Weise, ich denke, du meinst zu verwenden
htons
aber in dem Beispiel, Sie zeigenntohs
. Senden von C++, die Sie konvertieren möchten host, um netz bestellen. Empfangen von Java (oder einem client) Sie Ihre server umwandeln würde wieder mitntohs
.