Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ClientSocket и клиент microsoft [D6]


Страницы:   1 2

Эдик ©   (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.
Плясать надо от печки.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо