С приведенным ниже кодом я не получаю «daSHI», напечатанный на консоли. Вместо этого я получаю "?????" распечатаны.Socket - выход Bad OutputStream (Funky Question Marks)
Чтобы протестировать, вместо использования входных/выходных потоков сокета, я создал FileIputStream и FileOutputStream, записывая/считывая из того же файла, и «daSHI» был напечатан просто отлично.
Однако, когда я использую sock.getOutputStream и sock.getInputStream, по какой-то причине это не работает. Все, что я получаю, это вопросительные знаки. Есть идеи? Проблемы с кодированием?
public void sendMessage(Socket sock) throws KVException {
OutputStream outStream;
InputStream inStream;
try{
byte[] b = {'d', 'a', 'S', 'H', 'I'};
outStream = sock.getOutputStream();
outStream.write(b);
sock.shutdownOutput();
inStream = sock.getInputStream();
for (int i = 0; i < b.length; i++) {
System.out.print("" + (char) inStream.read());
}
}
catch(IOException e){
KVMessage errorMessage = new KVMessage("resp", "Network Error: Could not send data");
throw new KVException(errorMessage);
}
}
Является ли это шлейфовым соединением? Вы не показали, как сокет подключен к другому концу. Что на другом конце повторяет данные? –
Случайное предположение: входной поток находится в EOF, и это всего лишь 5 раз -1. Опустить (char) для проверки. Зачем? Зависит от вашего сервера ... Вы пытались добавить outStream.flush() и закрывать сокет только после того, как вы прочитали данные со входа? –
Ваш 'socket' InputStream не совпадает с' OutputStream'. Итак, почему вы ожидаете, что данные вернутся назад? –