wake-up-neo.com

Socket-Byte-Array senden und empfangen

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?

23
quan

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
}
60
franta kocourek

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.

8
Bombe

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.

3
Brian Agnew

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.

1
eckes