Эффективное программирование TCP-IP


         

Отказ приложения


А теперь разберемся, что происходит, когда аварийно или как-либо иначе завершается приложение на другом конце соединения. Прежде всего следует понимать, что с точки зрения вашего приложения аварийное завершение другого конца отличается от ситуации, когда приложение на том конце вызывает функцию close (или closesocket, если речь идет о Windows), а затем exit. В обоих случаях TCP на другом конце посылает вашему TCP сегмент FIN. FIN выступает в роли признака конца файла и означает, что у отправившего его приложения нет больше данных для вас. Это не значит, что приложение на другом конце завершилось или не хочет принимать данные. Подробнее это рассмотрено в совете 16. Как приложение уведомляется о приходе FIN (и уведомляется ли вообще), зависит от его действий в этот момент. Для проработки возможных ситуаций напишем небольшую клиентскую программу, которая читает строку из стандартного входа, посылает ее серверу, читает ответ сервера и записывает его на стандартный выход. Исходный текст клиента приведен в листинге 2.21.

Листинг 2.21. TCP-клиент, который читает и выводит строки

tcprw.с

1    #include "etcp.h"

2    int main( int argc, char **argv )

3    {

4    SOCKET s;

5    int rc;

6    int len;

7    char buf[ 120 ] ;

8    INIT();

9    s = tcp_client(  argv[ 1 ],   argv[ 2 ] );

10   while ( fgets( buf, sizeof( buf ), stdin ) != NULL )

11   {

12     len = strlen ( buf );

13     rc = send( s, buf, len, 0 );

14     if ( rc < 0 )

15      error( 1, errno, "ошибка вызова send" );

16     rc = readline( s, buf, sizeof( buf ) );

17     if ( rc < 0 )

18      error( 1, errno, "ошибка вызова readline" );

19     else if ( rc == 0 )

20      error( 1, 0, "сервер завершил работу\n" );

21     else

22      fputs( buf, stdout );

23   }

24   EXIT( 0 ) ;

25   }

8-9 Инициализируем приложение как TCP-клиент и соединяемся с указанными в командной строке сервером и портом.

10-15 Читаем строки из стандартного входа и посылаем их серверу, пока не встретится конец файла.



Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий