![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ClientSocket и клиент microsoft [D6]
Эдик © (2003-11-20 18:18:00)
Всем привет!
Подскажите пож., неужели компонент ClientSocket не может работать без Клиента сетей Microsoft в сетевом окружении, ато у нас сеть Microsoft под запретом... что делать?
И второе, как проще всего серваку отслеживать отпавших клиентов, onDisconnect далеко не всегда отрабатывает...почему? (последовательный перебор по таймеру не предлагать)
Заранее благодарен.
Alex Konshin (2003-12-01 15:08:00) [1]
Winsock 1.x в NT/2K/XP реализуется как враппер для Winsock2. То есть, реально все равно все работает через WS2, но API разный.
Эдик (2003-12-01 12:44:00) [2]
Все, умываю руки, вопрос исчерпан, еще раз СПАСИБО!!!
Digitman (2003-12-01 12:37:00) [3]
> А какая принципиальная разница? Вот цитата:
> The highest version of Windows Sockets support that the
> caller can use.
под "версией Windows Sockets" здесь подразумевается версия спецификации как таковой
> Задал 1.0, все, 1.1 уже будет не доступна в твоем приложении.
> Так?
задав версию 1.0 ты не сможешь воспользоваться в полной мере фунц-тью 1.1
Эдик (2003-12-01 11:53:00) [4]
А какая принципиальная разница? Вот цитата:
The highest version of Windows Sockets support that the caller can use.
Чтото типа - наибольшая версия Windows Sockets support которую вызывающий сможет исспользовать. Задал 1.0, все, 1.1 уже будет не доступна в твоем приложении. Так?
Digitman (2003-12-01 11:35:00) [5]
> WSAStartup не создвет сокет
верно
> В ней параметром задается версия сокета
не "версия сокета", а версия требуемой спецификации подсистемы Winsock
Эдик (2003-12-01 11:20:00) [6]
Спасибо всем!!!
Поправте меня, если я не прав...
WSAStartup не создвет сокет, но должна вызываться в обязательном порядке перед работой с сокетами, вот строка из хелпа:
The Windows Sockets WSAStartup function initiates use of the Windows Sockets DLL by a process.
В ней параметром задается версия сокета, каку версию задашь, с такой в дальнейшем у будешь работать.
Digitman (2003-11-30 12:37:00) [7]
> какой всетаки сокет открывается
никакой.
WSAStartup не имеет отношения к понятию "открытие сокета"
> почему без клиента Microsoft GetHostByName не смогла определить
> IP по IP,
пиши как положено : св-во Host - для задания ИМЕНИ хоста, св-во Address - для задания АДРЕСА хоста ... но не наоборот ... и будет тебе счастье)
Эдик (2003-11-29 17:26:00) [8]
Спасибо за ответы. Небольшие непонятки получились, пример я привел для того, чтоб спросить, какой всетаки сокет открывается... Мне не совсем понятно, почему 1.1 это WS2, хотя в Indi тоже 1.1 стоит, максимальное версия сокета, возвращаемая WSAStartup у меня - 2.
А почему без клиента Microsoft GetHostByName не смогла определить IP по IP, бред конечно так делать... просто спортивный интерес так сказать :-)))
Digitman (2003-11-29 11:29:00) [9]
> Кстати, текст ошибки - Windows socket error: (10110), on
> Api (ASync Lookup), ничего не говорит
еще как говорит !
сразу понятно, что отказ связан с преобразованием "имя хоста --> адрес хоста"
а именно - с вызовом ф-ции [WSAAsync]GetHostByName(), что не имеет ничего общего с фрагментом кода, приведенным тобой : "исключение" возбуждается вовсе не здесь, и это вообще не исключение
> Какой сокет откроется потом? - 1.1
до "открытия сокета" дело вообще не доходит, и затребованная версия Winsock именно 1.1 здесь так же ни при чем абсолютно.
отказ ароисходит на этапе вызова вышеупомянутой Lookup-ф-ции еще ДО того как будет вызвана ф-ция [WSA]Socket
поэтому к тебе сразу и был вопрос : приводи ТОЧНЫЙ код сообщения, коль тебе он ни о чем не говорит
теперь - о коде ошибки
WSA_E_NO_MORE = WSABASEERR+110;
этот код был введен в Winsock2, поэтому ни в файле Winsock.pas ни в хэлпе от Борланда он не фигурирует
на самом же деле при WSAStartup($0101, WSAData) инициализируется именно WS2
Anatoly Podgoretsky (2003-11-28 21:22:00) [10]
Как не говорит, а это что по твоему? ASync Lookup
Эдик (2003-11-28 20:57:00) [11]
Разобрался с проблемой, делюсь:
IP адрес присваивался свойству Host а не Adres, в присутствии клиента Microsoft "удавалось" компоненту найти правильный IP по адресу - IP, без него - нет...
Насчет Socket2, вот фрагмент ScktComp:
procedure Startup;
var
ErrorCode: Integer;
begin
ErrorCode := WSAStartup($0101, WSAData);
if ErrorCode <> 0 then
raise ESocketError.CreateResFmt(@sWindowsSocketError,
[SysErrorMessage(ErrorCode), ErrorCode, "WSAStartup"]);
end;
Какой сокет откроется потом? - 1.1. Так вот.
Кстати, текст ошибки - Windows socket error: (10110), on Api (ASync Lookup), ничего не говорит, а кода 110 нет в модуле WinSock. Получается - неизвестная ошибка.
Если я не прав - не пинайте пож. ногами, готов выслушать Ваше мнение
Digitman (2003-11-23 10:28:00) [12]
> какой текст сообщения?
если ты не обрабатываешь это событие, то при возникновении ошибки ты должен увидеть диал.окно с сообщением об ошибке, включаяя ее код и имя winsock-ф-ции, при выполнении которой ошибка возникла
приведения полного текста этого сообщения я и пытаюсь от тебя добиться)
> обсуждали ClientSocket, утверждали, что он тоже через WINSOCK2
> работает
так и есть.
для NT-платформы - безусловно
для win9x-систем - при условии обновления winsock-подсистемы
Эдик (2003-11-21 19:55:00) [13]
1. происходит событие OnError, параметр код ошибки - 10110
исключительная ситуация не генерируется, какой текст сообщения?
2. в соседнем форуме обсуждали ClientSocket, утверждали, что он тоже через WINSOCK2 работает...
S@shka (2003-11-21 19:32:00) [14]
Indy работают через WINSOCK 2
Digitman (2003-11-21 17:21:00) [15]
WSA_E_NO_MORE = WSABASEERR+110;
как выглядит точный текст сообщения об исключении ?
Эдик (2003-11-21 17:01:00) [16]
Господа Товарищи! Да никто не сдирает примеров, пользуюсь я, конечно, событием OnError, возвращает ошибку - 10110
О примере упомянул, только для того, чтоб Вы у себя ситуацию смоделировать смогли...
Digitman (2003-11-21 16:21:00) [17]
> не можите. Почему и как с этим бороться???
головой думать, а не сдирать пример и поплевывать в потолок в ожидании что пример будет обязательно работать
примеры даются для другого - для изучения общей логики
есть события On[Client]Error, есть обработка исключений ESocketConnection, ESocketError - все это дает исчерпывающую инф-цию для анализа "глюков" и принятия соотв.решений
Эдик (2003-11-21 16:02:00) [18]
Все работает пока в настройках сети присутствует Клиент сетей Microsoft, только сношу - ServerSocket работа а клиент отказывается, не хочет открыть сокет :-(((. Делфи и винда тут не при чем, пробовал на разных машинах.... с Можете попробовать:
C:\Program Files\Borland\Delphi6\Demos\Internet\Chat\ есть пример от Borland, откомпильте и запустите на выполнение 2 экземпляра программы, сможете обмениваться сообщениями, потом попробуйте удалить клиента Microsoft и вновь запустите.....не можите. Почему и как с этим бороться???
Кстати, Indi клиент и сервер работают без клиента Microsoft аж бегом.
Эдик (2003-11-20 19:17:00) [19]
реализация конечо Microsoft
Reindeer Moss Eater (2003-11-20 19:11:00) [20]
Оставь свою программу в покое и займись диагностикой TCP/IP.
Плясать надо от печки.