Может кто-нибудь объяснит мне, почему byte[] buf
на сервере не содержит 100 000 1s, отправленных клиентом? На отметке 60 тыс. Байт значения остаются в нуле. Я признаю, что не очень много работал с Streams или TCP, поэтому я уверен, что сделал что-то неправильно; Я просто не понимаю, что это такое. Я пробовал это с InputStream
и BufferedInputStream
на сервере с тем же результатом. Спасибо всем, кто может потратить время, чтобы объяснить это мне!Кто-нибудь, пожалуйста, объясните, почему у меня возникли проблемы с отправкой большого байта [] на сервер через TCP
Клиентский код довольно прост:
byte[] msgBytes = new byte[100000];
for (int i=0;i<msgBytes.length;i++){
msgBytes[i] = 1;
}
Socket sck = null;
try {
sck = new Socket("my.server.net", 1234);
OutputStream outStream = sck.getOutputStream();
outStream.write(msgBytes);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
sck.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Кроме того, код сервера также прост:
ServerSocket srvSock = new ServerSocket(1234);
Socket sock = srvSock.accept();
returnAddress = sock.getInetAddress();
returnPort = sock.getPort();
BufferedInputStream iStream = new BufferedInputStream(sock.getInputStream(), 100000);
byte[] buf = new byte[100000];
iStream.read(buf);
не уверен, что это ваша проблема, но в целом вы должны читать поток в цикле, пока не дойдете до конца. –
Спасибо за ответ! Могу ли я беспокоить вас примером? Откуда я знаю, что это конец? – RoboLam
BufferedInputStream.read (...) Возвращает: общее количество байтов, считанных в буфере, или -1, если данных больше нет, поскольку конец потока достигнут. –