![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему не работает??? [D6, Win95/98, WinME, NT4, Win2k, WinXP]
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)
> все компы говорили, что порт закрыт
ты сам-то разберись для начала, что тебя не устраивает) ...то - "открыт", то - "закрыт" ! Хрен разберешь, что у тебя там творится))))