Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2012, 19:35   #1
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию WinSock События

Всем привет, пишу консольное приложение, поэтому никаких моих любимых TServerSocket и TClientSocket и в помине нету. Получается
у меня есть класс пользователей. Когда клиент соединяется с сервером клиент будет передавать строку (Ну там имя, ip, не важно). Сервер обрабатывает строку и сохраняет в класс пользователей. А теперь вопрос, если клиент отсоединился, как это отследить на сервере (WinSock)? В TServerSocket было специальное событие OnClientDisconnect. Полазил в интернете, ничего путного найти не смог.

Да и еще, сокет работает синхроно и на TCPIP.
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Старый 16.09.2012, 07:29   #2
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Короче говоря вроде, как разобрлся с инициализацией и симуляцией событий. Вот только клиент почемуто не коннектится к серверу. WSAGetLastError возвращает ошибку 10035.
Описание ошибки :
Resource temporarily unavailable (Ресурс временно недоступен).
Эта ошибка возвращается операциями с неблокирующими сокетами, которые не могут быть немедленно завершены. Это не фатальная ошибка. Обычно WSAEWOULDBLOCK возвращается как результат вызова connect() на неблокирующем сокете SOCK_STREAM, поскольку для установления соединения требуется некоторое время.

Код Клиента:
Код:
C_CL.AC_Socket := socket( PF_INET, SOCK_STREAM, 0 ); //Создаем сокет
      if AC_CL.AC_Socket <> INVALID_SOCKET then    //Если сокет существует
        begin
        ioctlsocket(AC_CL.AC_Socket, FIONBIO, Block_Off);
        FillChar(AC_CL.AC_saddr, SizeOf(Sockaddr_in), 0);
        AC_CL.AC_saddr.sin_family := PF_INET;
        AC_CL.AC_saddr.sin_port := htons( AC_CL.AC_ServerPort );       //Операция с портом

        AC_CL.AC_saddr.sin_addr.s_addr := inet_addr(PAnsiChar(AC_CL.AC_ServerIP)); // сервер принимает подключения
        b := connect( AC_CL.AC_Socket, AC_CL.AC_saddr, sizeof( Sockaddr_in ) );
        if b = Socket_Error then
          begin
          Err:=WSAGetLastError;
          case Err of
            WSAECONNREFUSED : writeln( '[ERROR]: Failed Connect Socket WSAECONNREFUSED');
            WSAENETUNREACH  : writeln( '[ERROR]: Failed Connect Socket WSAENETUNREACH');
            WSAETIMEDOUT    : writeln( '[ERROR]: Failed Connect Socket WSAETIMEDOUT');
            else writeln('[ERROR]: Connection Error '+IntToStr(Err));
          end;
          ioctlsocket( AC_CL.AC_Socket, FIONBIO, Block_On );
          closesocket( AC_CL.AC_Socket );
          end else writeln( '[SYSTEM]: Connect Socket' );
        writeln( '[SYSTEM]: Create Socket' );
        end else writeln( '[ERROR]: Failed Create Socket' );
Как же бороться с этой ошибкой?
Каждый день узнаю новое...

Последний раз редактировалось Anton911; 16.09.2012 в 11:53.
Anton911 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
События в WPF. Обращение к компонентам формы из события Casper-SC Общие вопросы .NET 3 25.07.2010 19:03
Winsock n3sh C/C++ Сетевое программирование 2 25.07.2010 17:55
WinSock ImmortalAlexSan Работа с сетью в Delphi 1 11.05.2010 14:42
события winsock amaroktmb Работа с сетью в Delphi 2 06.01.2010 18:55
События WinSock telcomp Win Api 1 13.01.2009 09:26