Форум: "Сети";
Текущий архив: 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