Я все еще относительно новый для раструба, поэтому я столкнулся с небольшой проблемойгнезда не принимает данных после отправки
У меня есть мое приложение для Android, который дал поручение, чтобы послать массив байт через сокет, а затем сервер (также сделанный в java) получает данные, и при необходимости он отправляет ответ клиенту.
В практике то, что я получаю это:
- Сервер переходит на
- App подключается к серверу
- App посылает массив байтов
- Сервер получает данные
- сервер проверяет Theres любое сообщение, которое будет отправлено назад
- если да, отправьте данные
- Приложение не распознает InputStream
Клиентская сторона
//infinite loop
while(true) {
//client has anything to be sent
if (msg != null) {
//open output stream
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
if (msg.length > 0) {
dataOutputStream.write(msg, 0, msg.length);
dataOutputStream.flush();
outputStream.flush();
//send message (byte array)
}
InputStream inputStream = socket.getInputStream();
if (inputStream.available() > 0) {
//never gets in this statement
DataInputStream dataInputStream = new DataInputStream(inputStream);
String msg = dataInputStream.readUTF();
socket.shutdownInput();
}
disconnect();
}
}
Сервер
try {
//server inputstream
InputStream inputStream = client.getInputStream();
//sucessfully goes in
if(inputStream.available() > 0) {
BufferedReader inReader = new BufferedReader(new InputStreamReader(inputStream));
ByteArrayOutputStream output = new ByteArrayOutputStream();
//receives all of this properly, no problems
try (FileOutputStream fos = new FileOutputStream(filename)) {
int size = 1024;
int filesize = client.getReceiveBufferSize();
byte[] buffer = new byte[1024];
int bytesReceived;
while((bytesReceived = inputStream.read(buffer, 0, size)) > -1) {
fos.write(buffer, 0, bytesReceived);
output.write(buffer, 0, bytesReceived);
}
fos.close();
}
String message = frame.getMessage();
if(message.length() > 0) {
try {
//goes in here, no problem
OutputStream outputStream = client.getOutputStream();
DataOutputStream dos = new DataOutputStream(outputStream);
dos.writeUTF(message);
//writes the utf properly no problem
dos.close();
outputStream.close();
} catch (IOException ex) {
Logger.getLogger(ReceiveDataThread.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("Message '"+message+"' has been sent to " + frame.getConnection().getIp());
//all ok
}
client.close();
client = null;
Thread.currentThread().interrupt();
}
} catch (IOException ex) {
Logger.getLogger(ReceiveDataThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
Теперь, почему не клиент получения ответа UTF сервера?