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

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

Почему не работает??? [D6, Win95/98, WinME, NT4, Win2k, WinXP]


Страницы:   1 2

serd_hhc ©   (2002-11-26 00:16:00) 

Задача: проверить все компы в подсети (в данном случае 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;

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


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

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


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

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


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

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


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

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


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


> он равен -1



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

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


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

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


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

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


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

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


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

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


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

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


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

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


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


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



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


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

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

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


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

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


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


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


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


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


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


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

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


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

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


Serd_hhc   (2002-11-28 09:11:00) [17]

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


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

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

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

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


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

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


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


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



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


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


Страницы:   1 2

Наверх

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