Может кто-то демонстрировать, как отправить массив байтов по соединению TCP от программы отправителя до программы получателя в Java.
byte[] myByteArray
(Я плохо знаком с программированием Java и, может казаться, не нахожу пример того, как сделать это, которое показывает оба конца соединения (отправитель и получатель.), Если Вы знаете о существующем примере, возможно, Вы могли бы отправить ссылку. (Никакая потребность изобрести велосипед.) P.S. Это не домашняя работа!:-)
Классы InputStream
и OutputStream
в Java изначально обрабатывают массивы байтов. Единственное, что вы можете добавить, - это длину в начале сообщения, чтобы получатель знал, сколько байтов ожидать. Обычно мне нравится предлагать метод, который позволяет контролировать, какие байты в массиве байтов следует отправлять, во многом аналогично стандартному API.
Примерно так:
private Socket socket;
public void sendBytes(byte[] myByteArray) throws IOException {
sendBytes(myByteArray, 0, myByteArray.length);
}
public void sendBytes(byte[] myByteArray, int start, int len) throws IOException {
if (len < 0)
throw new IllegalArgumentException("Negative length not allowed");
if (start < 0 || start >= myByteArray.length)
throw new IndexOutOfBoundsException("Out of bounds: " + start);
// Other checks if needed.
// May be better to save the streams in the support class;
// just like the socket variable.
OutputStream out = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
dos.writeInt(len);
if (len > 0) {
dos.write(myByteArray, start, len);
}
}
РЕДАКТИРОВАТЬ : Чтобы добавить принимающую сторону:
public byte[] readBytes() throws IOException {
// Again, probably better to store these objects references in the support class
InputStream in = socket.getInputStream();
DataInputStream dis = new DataInputStream(in);
int len = dis.readInt();
byte[] data = new byte[len];
if (len > 0) {
dis.readFully(data);
}
return data;
}
Просто начните с этого примера из Really Big Index . Обратите внимание, что он предназначен для передачи и приема символов, а не байтов. Однако это не имеет большого значения - вы можете просто иметь дело с необработанными объектами InputStream
и OutputStream
, которые предоставляет класс Socket
. См. API для получения дополнительной информации о различных типах читателей, писателей и потоков. Вам будут интересны методы OutputStream.write (byte [])
и InputStream.read (byte [])
.
Вам необходимо использовать метод write
для java.io.OutputStream
и метод read
для java.io.InputStream
, оба из которых вы можете получить из открываемого Socket
.
Учебник Oracle Socket Communications Tutorial кажется подходящей отправной точкой.
Обратите внимание, что это будет дополнительная проблема для превращения символов в байты. Если вы хотите работать на уровне байтов, просто отделите это.
Этот учебник по Sun Sockets должен дать вам хорошую отправную точку