Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];

Вниз

Почему не работает???   Найти похожие ветки 

 
serd_hhc   (2002-11-26 00:16) [0]

Задача: проверить все компы в подсети (в данном случае 192.168.0.1-192.168.0.255). Но почему-то прога говорит, что этот порт откпыт у всех компов... даже у выключенных... что делать???
подскажите...

procedure TForm1.Search;
type
Tapyaddr=array [0..255] of PInAddr;
Papinaddr=^Tapyaddr;
var
s:TSocket;
WSAData:TWSAData;
addr:TSockAddr;
IP:string;
Server : PHostEnt;
i:integer;
begin
IP:="192.168.0.1";
WSAStartup(MakeWord(2,0),wsaData); //или MakeWord(1,1)
s := socket(AF_INET, SOCK_STREAM, 0);
if s=INVALID_SOCKET then exit;
addr.sin_family := AF_INET;
addr.sin_port := htons(3113); //порт №3113
for i:=Length(newip) downto 6 do if newip[i]="." then
begin
newip:=Copy(newip,1,i); //получаем строку "192.168.0."
break;
end;
for i:=1 to 255 do
begin
addr.sin_addr.s_addr:=inet_addr(PChar(IP+IntToStr(i)));
if connect(s, addr, sizeof (addr))<>SOCKET_ERROR then
Writeln(IP+IntToStr(i)+" : "+"port is open!");
closesocket(s);
end;
WSACleanup;
end;

объясните же мне в чём дело, или предложите свои коды...


 
Digitman   (2002-11-26 12:47) [1]

на основании чего ты считаешь, что, если connect(..) <>SOCKET_ERROR, то это говорит именно о том, что какой-то там "порт открыт" ? Чем ты руководствуешься при таком умозаключении, каким документом ?


 
Serd_hhc   (2002-11-26 19:24) [2]

Да вот помогли ЛЮДИ добрые...

а что дела-то надо???


 
Digitman   (2002-11-27 08:56) [3]


> Да вот помогли ЛЮДИ добрые...
>
> а что дела-то надо???


Не "сдирать безбашенно" чужой код, а думать самому ! И читать документацию. А если уж "содрал" - разберись в каждой строчке до мелочей - что, зачем и почему так, а не иначе.

Открывай хэлп Winsock 2 programmer"s reference и читай внимательно, что возвращает ф-ция connect(), при каких условиях и какова д.б. реакция в каждом конкретном случае


 
Serd_hhc   (2002-11-27 13:53) [4]

Я читал... даже МСДН, и там написано, что она должна возвращать 0, если коннект произошёл. Но скока я не тестировал, коннекта НЕ БЫЛО! Т.Е. все компы говорили, что порт закрыт, хотя я специально повешал на 3113 сервисы и на разных компах! Но нет же... я прошу помочь... помогите...


 
Digitman   (2002-11-27 14:09) [5]


serd_hhc © (26.11.02 00:16)
> почему-то прога говорит, что этот порт откпыт у всех компов...
> даже у выключенных



Serd_hhc © (27.11.02 13:53)
> все компы говорили, что порт закрыт


ты сам-то разберись для начала, что тебя не устраивает) ...то - "открыт", то - "закрыт" ! Хрен разберешь, что у тебя там творится))))


 
Serd_hhc   (2002-11-28 08:54) [6]

Так мне просто надо определить, на каком компе порт открыт, а на каком закрыт... в этом - то и дело!!! вот и всё! А вы даже помочь не можете


 
Digitman   (2002-11-28 09:07) [7]

Ты противоречишь сам себе в изложении наблюдаемого тобой ! Как я могу тебе помочь, если ты не излагаешь ТОЧНОЙ картины "действа" при исполнении конкретно приведенного кода ?)

А для этого кода однозначна только такая логика :

если connect(..) = 0, порт на целевом хосте открыт, иначе - либо целевой хост не существует либо целевой порт на целевом хосте не открыт для прослушивания.


 
Serd_hhc   (2002-11-28 09:11) [8]

Так мне просто надо определить, на каком компе порт открыт, а на каком закрыт... в этом - то и дело!!! вот и всё! А вы даже помочь не можете


 
Digitman   (2002-11-28 09:15) [9]

Это прокси твой "шалит" или ты завел одну и ту же песню унылую ?)
Я ж тебе сказал : если connect(..) = 0 - порт открыт, иначе - все остальное.


 
Serd_hhc   (2002-11-28 14:31) [10]

нет не прокси. я вооще в локалке. и вот ещё что, у клиетнтов даже не происходит OnClientConnect в TSocketServer!!!


 
Digitman   (2002-11-28 14:48) [11]


> нет не прокси. я вооще в локалке


не вижу никакой связи между твоей "локалкой" и прокси-сервером.


> у клиетнтов даже не происходит OnClientConnect в TSocketServer


Какое отношение к "клиентам" имеет компонент TSocketServer ? В распределенных сетевых приложениях это компонент для программирования серверной, отнюдь не клиентской стороны. А вот о коде, связанного с настройкой и использованием TSocketServer на стороне сервера, ты вообще не сказал ни слова.
Соизволь привести код сервера, если хочешь комментарии на эту тему


 
Serd_hhc   (2002-11-30 06:16) [12]

НЕТ! Тут важен не код сервера(коих я назвал клиентами, почему-то), а то, почему мой код(приведённый выше) не работает, и пишет, что не один 3113 порт в сети не ОТКРЫТ ни на одном компе!!! Вот в чём дело!!! НЕ сервер, главное -клиент!!!


 
Digitman   (2002-11-30 12:19) [13]


> пишет, что .. порт .. не ОТКРЫТ



> if connect(s, addr, sizeof (addr))<>SOCKET_ERROR then
> Writeln(IP+IntToStr(i)+" : "+" port is open!");


Я ,может, старый и тупой стал, но "port is open" - это "порт открыт"

А если уж "порт НЕ открыт", то это "port is NOT open"

Я не вижу нигде в твоем коде ничего похожего на "NOT open". Как же ты можешь утверждать, что твой код "пишет" эту фразу ?


 
Serd_hhc   (2002-12-01 04:53) [14]

Тогда если так:
if connect(s, addr, sizeof(addr))=0 then
Writeln(IP+IntToStr(i)+" : "+"port is open!") else
Writeln(IP+IntToStr(i)+" : "+"port is NOT open!");


 
serd_hhc   (2002-12-01 07:15) [15]

И этот код показывает, что на всех компах этот порт ЗАКРЫТ, хотя это не так!


 
Digitman   (2002-12-01 11:29) [16]

чему равен результат вызова WSAGetLastError() сразу за вызовом отказавшего вызова connect() ?


 
Anatoly Podgoretsky   (2002-12-01 21:17) [17]

И так далее по кругу :-)


 
LeReve   (2002-12-01 21:33) [18]

мда.... СКАЗАЛ БЫ Я КОЕ КОМУ КОЕ ЧТО......................ЭХ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


 
Serd_hhc   (2002-12-02 05:07) [19]

2Digitman:
он равен -1
2All:
лучше бы помогли


 
Digitman   (2002-12-02 08:45) [20]


> он равен -1



Чушь-то не городи ! Если connect() вернул -1, то WSAGetLastError() должен вернуть реальный код ошибки, по которому можно судить о характере и причинах отказа. И никак он не может быть равен -1 !!

см. Winsock.pas, baseerr = 10000
любой код ошибки есть baseerr + err_offset, в рез-те чего код ошибуи лежит в диапазоне, начинающемся с 10000


 
Serd_hhc   (2002-12-02 20:36) [21]

ДА я те ПРАВДУ ГОВОРЮ!!!


 
Serd_hhc   (2002-12-03 05:02) [22]

Ну так что... никто не знает???


 
Digitman   (2002-12-03 08:11) [23]

Приведи код в порядок, с выводом в диалог.окно кода ошибки (как результата WSAGetlastError)после каждой отказавшей ф-ции, тогда и разговор серьезный будет. Чего тут из пустого в порожнее переливать...


 
Serd_hhc   (2002-12-03 19:45) [24]

Ладно... попробую...



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.01.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.008 c
1-96764
tulen
2003-01-22 17:50
2003.01.30
Возможно ли?


1-96738
Masik
2003-01-22 10:39
2003.01.30
Компиляция пакаджа...


9-96506
Данилин Руслан
2002-08-04 19:53
2003.01.30
Прозрачность


1-96670
AlexAlex2
2003-01-17 11:29
2003.01.30
Переход VCL->CLX


1-96711
DTK
2003-01-20 15:17
2003.01.30
Работа с рисунками





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский