Auf dem Server habe ich ein Bytearray über Java Socket an den Client gesendet
byte[] message = ... ;
DataOutputStream dout = new DataOutputStream(client.getOutputStream());
dout.write(message);
Wie kann ich dieses Byte-Array vom Client erhalten?
Probieren Sie es aus, es funktioniert für mich.
Absender:
byte[] message = ...
Socket socket = ...
DataOutputStream dOut = new DataOutputStream(socket.getOutputStream());
dOut.writeInt(message.length); // write length of the message
dOut.write(message); // write the message
Empfänger:
Socket socket = ...
DataInputStream dIn = new DataInputStream(socket.getInputStream());
int length = dIn.readInt(); // read length of incoming message
if(length>0) {
byte[] message = new byte[length];
dIn.readFully(message, 0, message.length); // read the message
}
Verwenden Sie zunächst DataOutputStream
nur, wenn dies wirklich erforderlich ist. Zweite:
Socket socket = new Socket("Host", port);
OutputStream socketOutputStream = socket.getOutputStream();
socketOutputStream.write(message);
Natürlich fehlt hier jede Fehlerprüfung, aber das sollte Sie zum Laufen bringen. Das JDK API Javadoc ist dein Freund und kann dir sehr helfen.
Es gibt ein JDK-Socket-Tutorial hier , das sowohl die Server- als auch die Client-Seite abdeckt. Das sieht genau so aus, wie du es willst.
(aus diesem Tutorial) Dies richtet sich zum Lesen von einem Echoserver ein:
echoSocket = new Socket("taranis", 7);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
nehmen eines Bytestroms und Konvertieren in Zeichenfolgen über den Reader und Verwenden einer Standardcodierung (normalerweise nicht empfehlenswert).
Fehlerbehandlung und Schließen von Sockets/Streams wurden in der obigen Beschreibung nicht berücksichtigt. Überprüfen Sie jedoch das Lernprogramm.
Entweder muss die Nachricht eine feste Größe haben, oder Sie müssen die Größe senden oder Sie müssen einige Trennzeichen verwenden.
Dies ist der einfachste Fall für eine bekannte Größe (100 Byte):
in = new DataInputStream(server.getInputStream());
byte[] message = new byte[100]; // the well known size
in.readFully(message);
In diesem Fall ist DataInputStream
sinnvoll, da es readFully()
bietet. Wenn Sie es nicht verwenden, müssen Sie eine Schleife ausführen, bis die erwartete Anzahl von Bytes gelesen wurde.