DataOutputStream.writeBytes добавляет ноль байтов

1

У меня небольшая программа TCP-сервера и соответствующий клиент, и они общаются через классы ServerSocket и Socket и DataInputStream/DataOutputStream. И у меня проблема с отправкой Strings на сервер.

connection = new Socket("localhost", 2233);

outStream = new DataOutputStream(connection.getOutputStream());

outStream.writeBytes(fileName);

fileName на данный момент является жестко запрограммированной строкой со значением "listener.jardesc". Сервер считывает строку со следующим кодом:

inStream = new DataInputStream(connection.getInputStream());

String fileName = inStream.readLine();

Строка получена правильно, но три байта с нулевым значением добавлены в конец. Почему это и как я могу остановить его? (Я мог бы, конечно, обрезать полученную строку или каким-то образом остановить эту проблему от материи, но я бы предпочел полностью предотвратить эту проблему)

Теги:
tcp

2 ответа

0

writeBytes() не добавляет лишних байтов.

Код, который вы написали, недействителен, так как вы не пишете новую строку. Поэтому он не работает и навсегда блокирует readLine().

При попытке отладить это вы, кажется, читали байты другим способом, возможно, с read(); и проигнорировать возвращаемое значение, возвращаемое чтением, и сделать вывод, что read() заполнил предоставленный вами буфер, когда он этого не сделал, оставив три байта в их исходном состоянии, которое равно нулю.

0

Я просто собираюсь бросить это там. Вы используете метод readLine(), который устарел в Java 5, 6 и 7. В документах API достаточно четко указано, что этот метод "неправильно преобразовывает байты в символы". Я бы прочитал его как байты или использовал Buffered Reader.

http://docs.oracle.com/javase/1.5.0/docs/api/java/io/DataInputStream.html#readLine%28%29

Ещё вопросы

Сообщество Overcoder
Наверх
Меню