2013-11-22 1 views
0

С приведенным ниже кодом я не получаю «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); 
    } 
} 
+0

Является ли это шлейфовым соединением? Вы не показали, как сокет подключен к другому концу. Что на другом конце повторяет данные? –

+0

Случайное предположение: входной поток находится в EOF, и это всего лишь 5 раз -1. Опустить (char) для проверки. Зачем? Зависит от вашего сервера ... Вы пытались добавить outStream.flush() и закрывать сокет только после того, как вы прочитали данные со входа? –

+0

Ваш 'socket' InputStream не совпадает с' OutputStream'. Итак, почему вы ожидаете, что данные вернутся назад? –

ответ

0

Если вы не подключены к эхо-сервер или другой копии одного и того же приложения, розетки не работают таким образом, вы не можете ожидать, чтобы читать то, что вы написали, потому что вы читаете то, что дальний конец сокета отправляется.

Скорее всего, причина в том, что входной поток достиг EOF, а read() возвращает -1. -1 становится zigamorph при отливке до char, и печать этого недопустимого символа создает ?.

+0

Интересно, спасибо за понимание. – Jonathan

 Смежные вопросы

  • Нет связанных вопросов^_^