Программирование POSIX сокет. Сукиязов С.А. - 17 стр.

UptoLike

Составители: 

Листинг 8.Пример эхо-сервера.
/****************************************************************/
/*** Пример эхо-сервера: возврат полученного сообщения ***/
/*** до тех пор, пока не поступит команда "bye<ret>" ***/
/****************************************************************/
/*** (Внутри цикла после функции accept()) ***/
if ( client > 0 )
{ char buffer[1024];
int nbytes;
do
{
nbytes = recv(client, buffer, sizeof(buffer), 0);
if ( nbytes > 0 ) /* если получены данные, возвращаем их */
send(client, buffer, nbytes, 0);
}
while ( nbytes > 0 && strncmp("bye\r", buffer, 4) != 0);
close(client);
}
Заметьте, что признаком окончания сеанса является строка "bye\r", а не "bye\n". В общем случае
это зависит от того, как выполняется обработка входного потока. Из соображений надежности следует
проверять оба случая. Попробуйте протестировать данную программу, использовав в качестве клиента
утилиту Telnet.
Листинг 8.Пример эхо-сервера.
/****************************************************************/
/***     Пример эхо-сервера: возврат полученного сообщения    ***/
/***     до тех пор, пока не поступит команда "bye"      ***/
/****************************************************************/
/*** (Внутри цикла после функции accept()) ***/
if ( client > 0 )
{ char buffer[1024];
  int nbytes;

    do
    {
      nbytes = recv(client, buffer, sizeof(buffer), 0);
      if ( nbytes > 0 ) /* если получены данные, возвращаем их */
         send(client, buffer, nbytes, 0);
    }
    while ( nbytes > 0 && strncmp("bye\r", buffer, 4) != 0);
    close(client);
}

       Заметьте, что признаком окончания сеанса является строка "bye\r", а не "bye\n". В общем случае
это зависит от того, как выполняется обработка входного потока. Из соображений надежности следует
проверять оба случая. Попробуйте протестировать данную программу, использовав в качестве клиента
утилиту                                                                                        Telnet.