Форум: "Сети";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Внизconnect function Найти похожие ветки
← →
clim (2003-07-23 00:20) [0]у меня такой вопрос:
значит когда я устонавливаю соединение с каким-либо хостом на определенный порт,
то если таковой порт закрыт - очень долго генерирутся ошибка, что порт закрыт,
я написал такой код
...
A.sin_family:=AF_INET;
A.sin_addr.S_addr:=inet_addr(pchar(ip));
A.sin_port:=htons(port_number);
S:=socket(AF_INET,SOCK_STREAM,0);
port := false;
starttime:=GetCurrentTime();
while (GetCurrentTime() - starttime < wait_for_response) do
begin
if connect(S,A,sizeof(A))=0 then
port := true;
end;
if port=true then
Memo1.Lines.add(inttostr(port_number)+" -> open")
else
( inttostr(port_number) у меня такой вопрос:
значит когда я устонавливаю соединение с каким-либо хостом на определенный порт,
то если таковой порт закрыт - очень долго генерирутся ошибка, что порт закрыт,
я написал такой код
...
A.sin_family:=AF_INET;
A.sin_addr.S_addr:=inet_addr(pchar(ip));
A.sin_port:=htons(port_number);
S:=socket(AF_INET,SOCK_STREAM,0);
port := false;
starttime:=GetCurrentTime();
while (GetCurrentTime() - starttime < wait_for_response) do
begin
if connect(S,A,sizeof(A))=0 then
port := true;
end;
if port=true then
Memo1.Lines.add(inttostr(port_number)+" -> open")
else
Memo1.Lines.add(inttostr(port_number)+" -> close");
...
но ошибка все равно долго обрабатывается
Что делать???
← →
Digitman (2003-07-23 08:35) [1]
> долго обрабатывается
"долго" это сколько ? и сколько, по твоему, д.б. "недолго" ?
← →
clim (2003-07-23 14:59) [2]примерно 5-7 секунд
нужно чтобы около 1, максимум 2
← →
Digitman (2003-07-23 15:16) [3]
> clim
что значит "нужно" ? мало ли чего тебе нужно ! сервер может быть на другом конце света, сервер может быть нагружен до предела - мало ли причин, по которым реакция на твой запрос не мгновенна ?
обратись к серверу на твоей же (локальной) машине - будет тебе реакция в доли секунды !
← →
clim (2003-07-23 15:43) [4]хотя нет -- я ошибся, чтобы определить состояние одного порта этому кусочку кода треюуется 50 секунд.
к стати очень хорошо заметно, что интенсивность хождения пакетов во
время этого кода очень низкая.
если сравнивать со скоростью, с которой сканируют порты, такие программки как nmap, portscanner, то скорость очень низкая =(
от сервака ничего не завист!!!
← →
Е-моё имя (2003-07-23 15:45) [5]clim (23.07.03 15:43)
почитай про установление TCP соединения и сразу все поймешь
← →
Digitman (2003-07-23 15:51) [6]
> clim
> от сервака ничего не завист!!!
зависит ! еще как зависит !
и от "сервака", и от способа/интерфейса доступа в сеть провайдера, и от маршрута... много от чего зависит !
читай все про протоколы IP и TCP/IP
← →
clim (2003-07-23 18:58) [7]> digitman
я про сервак имел в виду- для меня ничего не завичит
где почитать???
← →
nikus (2003-07-23 20:26) [8]2clim
www.google.ru
"Описание протокола TCP/IP"
Изучай =)
А применительно к "если сравнивать со скоростью, с которой сканируют порты, такие программки как nmap, portscanner, то скорость очень низкая =(" скажу, что эти проги создают несколько десятков/сотен сокетов, каждый из которых коннектиться одновременно.
Попингуй любой хост - установление коннекта будет идти не меньше.
← →
clim (2003-07-23 20:57) [9]2nikus
слушай я смотрел их исходники, и нисего такого не замечал,
все дело в том что это си а дельфи
← →
nikus (2003-07-23 21:28) [10]
clim> слушай я смотрел их исходники, и нисего такого не замечал,
Плохо смотрел значит
clim> все дело в том что это си а дельфи
И что, TCP/IP для Си и Делфи работает по-разному? Тебе ж сказали - читай описание протокола TCP/IP, и тогда ты поймёшь, ПОЧЕМУ ответ идёт долго.
← →
clim (2003-07-23 23:42) [11]объясняю еще раз:
когда я коннекчусь на существующий порт - эта операция занимает от 1 до 3(максимум) секунд
но, когда пытаюсь законнектиться на несуществующий -- результат удручающий, т.е. приходится ждать от 40 до 60 секунд, хотя в общем-то всегда 50
вот я и спрашиваю, как мне можно определить несуществующий порт с такой же скоростью, с какой определяю существующий
к тому с чего вы взяли что я спецификаций не знаю, это я вам с таким же успехом могу предложить: читай rfc1-2000
← →
Digitman (2003-07-24 08:23) [12]
> как мне можно определить несуществующий порт с такой же
> скоростью, с какой определяю существующий
никак.
← →
Verg (2003-07-24 14:54) [13]Вот ты когда звонишь в дверь к соседу, то как тебе мнгновенно определить, что его нет дома?
Нет ведь, ты звонишь раз, слушаешь нет ли шагов, ждешь таймаут, звонишь второй раз, снова ждешь-слушаешь....
Т.е. если сосед не открыл дверь сразу же - это вовсе ведь не значит, что его нет дома... Мож он просто, пардон, в сортире завис по известным причинам :)
← →
Digitman (2003-07-24 14:58) [14]
> Verg
Замечательная, кстати говоря, ассоциация !))
Про сортир я вот как то и не дотумкал сравнение привести)
Дай бог на пользу автору сабжа !
← →
Rouse_ (2003-07-24 15:27) [15]Используйте таймлимит, в компонентах это реализовано.
Желаю успехов
← →
clim (2003-07-24 17:15) [16]именно про тайм лимит, я и спрашивал, ничего больше
не следует тут пальцы кидать
2Rouse_ спасибо
← →
Digitman (2003-07-24 17:37) [17]
> clim
умник !) а если ты ограничишь тайм-лимитом время ожидания ACK или RST, а коннект к заведомо активному порту чуть превысит это время ? по каким-то объективным причинам ? буквально - на доли секунды ? тогда что ?)
← →
Verg (2003-07-24 18:31) [18]Ну тык, и ограничивай свой тайм-лимит:
Говоришь ClinetSockt1.Active:=true;
Он тебе говорит - "Ок, понял, начинаю" - OnConnecting;
на что ты заводишь таймер Timer1.Enabled:=true;
Где OnTimer1Timer (нет связи) Делаешь ClientSocket1.Socket.Close;
На все остальные события Timer1.Enabled:=false;
В чем трабл-то?
Я тебе модель дал - ну хочешь ты считать, что никого нет дома, если через секунду после звонка дверь не открыли - твое право.
Или тебе не хочется верить, что TCP/IP - это протокол БЕЗ гарантированного времени доставки?
Однако так оно и есть на самом деле....
← →
Digitman (2003-07-25 08:32) [19]
> Verg
эк ты в дебри-то полез)
автор тут, видишь ли, на winsockAPI код "ваяет") круче как бы уже некуда)
и ничего, видимо, не представляя про существование асинхронного режима)
а ты ему - про какой-то ClientSocket))))
← →
Alex Konshin (2003-07-26 13:00) [20]Да вы приглядитесь внимательнее, что в указанном фрагменте в цикле происходит.
← →
Verg (2003-07-26 18:09) [21]
> Да вы приглядитесь внимательнее, что в указанном фрагменте
> в цикле происходит.
Устанавливается соединение в течение wait_for_response времени.
По истечению wait_for_response, если соединение было установлено, то... в общем пишем одно, иначе пишем другое.
Когда соединение не устанавливается, то цикл заканчивается через время намного, видимо, превышающее wait_for_response.
Что и вызывает недоумение/неудовольствие:
> но ошибка все равно долго обрабатывается
Правда и удачное (быстрое) соединение не уменьшает времени выполнения данного цикла (хош-не хош, соединение-не соединение, а wait_for_response времени долбимся в открытую дверь, прикинь - аналогия с соседом - он открывает дверь, а на пороге стоит чувак и глядя на секундомер продолжает нажимать звонок положеные еще секунд -цать:)))) но... это уже другой вопрос :))
← →
nikus (2003-07-26 20:44) [22]2Verg
аналогия с соседом - он открывает дверь, а на пороге стоит чувак и глядя на секундомер продолжает нажимать звонок положеные еще секунд -цать:))))
А я бы сказал: бедный сосед открывает дверь и смотрит, как толпы чуваков вбегают в его квартиру, и никто не выходит, в течение ...дцати секунд :).
ЗЫ Потому как дисконнекта нет...
← →
Morfein (2003-07-27 18:43) [23]А я бы не так сказал. Вся толпа остаётся на пороге, и ждёт, когда их пригласят внутрь. А внутрь их всех не пригласят либо потому что таймаут для запросов на соединение от большинства наступил, либо потому что лимит соединений с одного адреса не позволяет эту толпу целиком впустить.
← →
Polevi (2003-07-27 19:55) [24]>вот я и спрашиваю, как мне можно определить несуществующий порт
>с такой же скоростью, с какой определяю существующий
порт никак, можно сначала выполнить ping на предмет существования хоста, если есть - попробовать установить соединение
← →
Digitman (2003-07-28 08:13) [25]и брейка в теле цикла нет) ... тоже заметил только что
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.01 c