2012-04-06 2 views
0

Я использую apache.commons.net.telnet.Как писать символы в TelnetOutputStream по одному за раз?

У меня char[] array. Я звоню TelnetClient.getOutputStream().write(array[i]).

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

+0

Вы уже пробовали Outputstream.flush() после write()? – MartinK

+0

Да, я вызываю 'flush()' после 'write()'! – DenisM

ответ

1

ОК. Вот правильный ответ. Чтобы отправить данные как можно быстрее, выполните следующие действия:

Вызов setTcpNoDelay (true) в вашем потоке вывода.

Звоните писать всем своим массивом. Вы должны NEWER EVER писать один байт за раз. Написание всего массива в одно и то же время будет намного быстрее.

Вызов флеша() после вашей записи.

Это самый быстрый способ отправки данных, а также способ, который создаст наименьшую задержку. То есть: отправка байтов по одному не гарантирует, что сервер будет получать их быстрее.

Отправка данных по одному байту за один раз замедлит вас, а не ускорит работу.

0

Вы пробовали позвонить flush() после каждого звонка на запись()?

flush() Функция должна отправить что-либо в поток до заполнения буфера.

0

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

OutputStream os=TelnetClient.getOutputStream(); 
for(int i=0;i!=array.length;i++) { 
    os.write(array[i]); 
    os.flush(); 
} 
+0

Я делаю точно. Но это не работает. – DenisM

+0

Возможно, это связано с тем, что ваши os хранят данные, ожидающие большего количества данных, прежде чем отправлять их. Просто тест, попробуйте добавить вызов Thread.sleep (10) после каждого флеша. Но я до сих пор не понимаю, почему вы хотите это сделать. Отправка ваших данных по одному байту за один раз займет не менее 100 раз до момента отправки всего этого. – MTilsted

+0

Мне нужно получить ответ от telnet-сервера в режиме реального времени! – DenisM