Ruby/Сети: различия между версиями

4 байта добавлено ,  3 года назад
(орфография, викификатор)
}</source>
 
Всё замечательно, но программа не работает. Не вся, конечно… Она выводит приглашение к диалогу и всё, дальше виснет. Это связано с тем, что используется метод <code>.read</code>, который считывает весь поток целиком, пока не встретит символ EOF. Его-то наш сервер как раз и не передаёт. Не будем пока спешить и править сервер, а применим один приём: будем использовать не метод <code>.read</code>, а метод <code>.sysread(n)</code>. Метод <code>.sysread(n)</code> считывает первых <code>n</code> сиволовсимволов из потока. Так как мы не знаем, сколько нам надо считать символов, то мы зададим в качестве <code>n</code> очень большое число. Например, <code>5000</code>. Если символов в потоке меньше, чем <code>5000</code>, то <code>.sysread(n)</code> считает столько, сколько есть. Эту особенность мы и используем.
 
<source lang="ruby">require 'socket'
* <code>loop{ … }</code>
 
Используя бесконечный цикл, мы получаем возможносьвозможность самостоятельно определять точку выхода из цикла. Это бывает полезно лишь на начальных стадиях реализации. Дальше лучше избавляться от бесконечного цикла и переходить сначала к циклам с предусловием, а потом (при возможности) к итераторам.
 
* <code>if str[/^\+OK/] then … else … end</code>
93

правки