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

Вниз

Можно ли получить IP компа, на котором запущен ServerSocket?   Найти похожие ветки 

 
Ламер   (2004-02-16 11:11) [0]

Можно ли получить IP компа, на котором запущен ServerSocket, а остальные компы в сети не были видны?


 
Digitman ©   (2004-02-16 11:29) [1]


> Можно ли получить IP компа, на котором запущен ServerSocket


можно ... например, спросить у сисадмина


> не были видны?


кому ? не видны ?


 
nazgul   (2004-02-16 11:33) [2]

если я неощибаюсь он хочет зделать чтоб, когда серверная часть программы создала СЕРВАК, то в клиенских программах это отоброзилось, и они смогли к нему приконектица.
P.s тоже хотелось бы узнать


 
dr Tr0jan ©   (2004-02-16 12:13) [3]

2 nazgul:

Что ты имеешь ввиду?
Пусть клиенты коннектятся к серваку, через определенное время.


 
nazgul   (2004-02-16 12:17) [4]

Блин, представь заходишь в стрелялку, нажимаешь лан гаме и смотришь несоздал ли кто, если создал то ты к нему конектишься, если нет, то создаешь сам и к тебе конектяца


 
nazgul   (2004-02-16 12:19) [5]

На другом форуме мне говори ли чё такое невозможно... =(


 
Ламер   (2004-02-16 12:22) [6]

Вы меня недопонимаете. Например, я на своем компе запускаю ServerSocket. На другом компе я сканирую сеть и вижу только этот комп-сервер или как-нибудь, чтобы было видно, что на нем запущен ServerSocket.


 
Плохиш   (2004-02-16 12:22) [7]


> nazgul   (16.02.04 12:19) [5]
> На другом форуме мне говори ли чё такое невозможно... =(

Обманывали ;-) Сделать можно всё.
Что лавры больших фирм покоя недают? ;-)


 
Ламер   (2004-02-16 12:23) [8]

2 nazgul:
ВОТ-ВОТ именно это мне и НАДО!


 
nazgul   (2004-02-16 12:31) [9]

2 Плохиш
причём тут лавры "больших фирм"????

2 Ламер
Да сразу понятно было что ты имел в виду, у мастеров токой принцип: разжуй всё до мельчайших подробностей и тогда мож помогут, а мож и непомогут.


 
Alex Konshin ©   (2004-02-16 12:38) [10]

Черномырдин отдыхает.
Вы с nazgul нашли друг друга. :)

Вы меня недопонимаете
Да, есть такое.
Попробуй написать вопрос подробно и по-русски. Многим это помогает.
Прежде чем требовать уважения к своим вопросам, постарайся уважать тех, кто будет их читать и отвечать на них.
И прежде чем начать задавать вопросы, очень полезно перед этим почитать форум. Это обычно избавляет от необходимости задавать свой вопрос.

Тебе нужно, чтобы клиент посылал широковещательный UDP запрос, а сервер, слушал такие запросы и отвечал на них.

Этот вопрос задается тут чуть ли не несколько раз в неделю.


 
Anatoly Podgoretsky ©   (2004-02-16 12:39) [11]

Иногда лучше жевать, чем говорить.


 
nazgul   (2004-02-16 13:02) [12]

2 Alex Konshin
возможно проблема в том, что вы прсто неумете видить то что написанно, помойму он ясно написал:

Ламер   (16.02.04 11:11)  
Можно ли получить IP компа, на котором запущен ServerSocket, а остальные компы в сети не были видны?

... причём тут UDP запрос?


 
Ламер   (2004-02-16 13:03) [13]

Обратили внимание на мой ник и подскажите: чтобы клиент посылал широковещательный UDP запрос, а сервер, слушал такие запросы и отвечал на них.


 
Ламер   (2004-02-16 13:06) [14]

НУ хоть что-нибудь.


 
Digitman ©   (2004-02-16 13:14) [15]

что тебе подсказать, если ты даже не удосужился уточнить, в рамках ЛВС все это у тебя будет работать или в глоб.сети ?


 
v][x   (2004-02-16 13:22) [16]

Возможно также использова асинхронные сокеты:

function TMainForm.FindServer:Boolean;
const StartAddr=1;
const FinishAddr=254;
var
 Data:WSAData;
 Sock:Array[StartAddr..FinishAddr] of TSocket;
 Addr:TSockAddr;
 Fd:TFdSet;
 k,i,p:Integer;
 TmVal:TTimeVal;
begin
 FD_ZERO(Fd);
 try
   For i:=StartAddr to FinishAddr do
   begin
     if WSAStartup($101,Data)<>0 then
     begin
       Result:=False;
       Exit;
     end;
     Addr.sin_family:=AF_INET;
     Addr.sin_addr.S_addr:=inet_addr(PChar("192.168.100."+IntToStr(i)));
     Sock[i]:=Socket(AF_INET,SOCK_STREAM,0);
     if Sock[i]=INVALID_SOCKET then
       Result:=False;
     Addr.sin_port:=htons(1600);
     k:=1;
     FD_SET(Sock[i],Fd);
     ioctlsocket(Integer(Sock[i]),FIONBIO,k);
     connect(Sock[i],Addr,SizeOf(Addr))
   end;
   TmVal.tv_sec:=3;
   TmVal.tv_usec:=0;
   Select(FD_SETSIZE,nil,@Fd,nil,@TmVal);
   For i:=StartAddr to FinishAddr do
     if FD_ISSET(Sock[i],Fd) then
     begin
       p:=SizeOf(k);
       IpServer:="192.168.100."+IntToStr(i);
       CloseSocket(Sock[i]);
       Result:=True;
       Exit;
     end;
 finally
   WSACleanup;
 end;
end;


Метод создает асинхронные сокеты и пытается коннектится на порт 1600 ко всем компам в локальной сети, IP которых начинаются на 192.168.100. Метод работает 100%, время поиска в сети из 67 компов ~2 c.


 
v][x ©   (2004-02-16 13:26) [17]

Да, кстати, метод возвращает true, если сервер ответил или false, если он не был найден или возникла ошибка.


 
v][x ©   (2004-02-16 13:29) [18]

2nazgul
... причём тут UDP запрос?
Нужно читать умные книжки и обточить руки напильником, тогда поймешь причем тут UDP. Кстати, тоже довольно хороший вариант, только в Inet"е он также бесполезен как и мой вариант. UDP пакеты глушатся чем только можно, протокол не поддерживает гарантированную доставку (т.е. даже не узнаешь, что пакет не дошел), но работае еще быстрее чем асинхронный сокет. Правда, админы часто настраивают сеть так, чтобы UDP пакеты глушились.


 
Verg ©   (2004-02-16 13:30) [19]


> v][x   (16.02.04 13:22) [16]


Это называется сканирование сети.
Используются неблокирующие сокеты, а не асинхронные.

А зачем для каждого адреса в отдельности WSAStartup?

Вот тут более строго об этом:

An application must call one WSACleanup call for every successful WSAStartup call to allow third-party DLLs to make use of a Ws2_32.dll on behalf of an application. This means, for example, that if an application calls WSAStartup three times, it must call WSACleanup three times. The first two calls to WSACleanup do nothing except decrement an internal counter; the final WSACleanup call for the task does all necessary resource deallocation for the task.


 
v][x ©   (2004-02-16 13:36) [20]

2Verg

Извиняюсь, кинул не тот исходник. Ну да ладно, этот тоже работает. Я его давным давно писал, поэтому и для каждого адреса. А так, конечно, за цикл его.


 
Verg ©   (2004-02-16 13:54) [21]

v][x ©  

Насчет UDP.
Ладно, оставим пока в покое тезис про админов и их нелюбовь к UDP.

Имелось ввиду то, что если бы сервер наряду с основным транспортом TCP держал бы еще и свой "эхо-мояк" в виде UDP сокета слушающего известный всем заинтересованным порт.

Тогда бы для поиска этого сервера в пределах сегмента сети можно было бы отправить широковещательный UDP пакет, адресованный на этот порт. А сервер, получив бы его, отправил бы "запрашивающему" (уже юникастом) ответ - тоже UDP пакет в котором бы он назвал свои точные координаты для главного подключения по TCP/IP. В этом случае поиск сервера бы осуществлялся намного, мягко говоря, быстрее.
А главное, что недостатком негарантированности доставки UDP в данном случае можно пренебречь.


 
v][x ©   (2004-02-16 13:59) [22]

2Verg

А я что против? И на UDP можно. Без проблем. И быстрее будет, и писать меньше.


 
Digitman ©   (2004-02-16 14:02) [23]


> Verg ©   (16.02.04 13:54) [21]


и ты, Андрей, свято веруешь, что неким кул-программерам в сей ветке (да и не только) ведомо, что есть "сегмент сети" ?!


 
Digitman ©   (2004-02-16 14:06) [24]

я рисую себе картину рушащегося мира, когда некий хренов кул-хацкер шлет ежесекундно бродкаст в мировую сеть (каждому задрипаному ее хосту !), мол, я. такой-то кул-чего-то, активизировал на своем хосте гаме-сервис))))))


 
Verg ©   (2004-02-16 14:08) [25]


> Digitman ©   (16.02.04 14:02) [23]


Ну, во-первых,

> v][x ©  

Ему-то точно известно :)

Во-вторых, можно как-то, где-то, лишний раз попрактиковаться в изложении мыслей ? :))
Тем более, что я сейчас дописываю документацию по своему недавно-сданному проекту и ищу любой повод чтобы не работать (шутка:)))


 
Verg ©   (2004-02-16 14:11) [26]


> Digitman ©   (16.02.04 14:06) [24]


Не бойся: броадкаст дальше ближайшего роутера не пойдет :)
А если чел замусорит свой сегмент, то ему админ сети-то и вставит "нужные" мысли в "нужное место" :)


 
Digitman ©   (2004-02-16 14:20) [27]


> Verg ©   (16.02.04 14:11) [26]
> Не бойся: броадкаст дальше ближайшего роутера не пойдет


я-то не боюсь) ... и прекрасно понимаю, что любой мало-мальски серьезный роутер в глоб.сети даст отлуп кул-хацкеру, вознамерившемуся  посылать с хоста в ЛВС дер.Голожоповки бродкасты в мировую сеть с призывом поиграться в бирюльки)))


 
Anatoly Podgoretsky ©   (2004-02-16 14:30) [28]

Digitman ©   (16.02.04 14:06) [24]
Каждый хакер мечтает запинговать 255.255.255.255


 
Alex Konshin ©   (2004-02-16 22:08) [29]


nazgul   (16.02.04 13:02) [12]
2 Alex Konshin
возможно проблема в том, что вы прсто неумете видить то что написанно, помойму он ясно написал:

Я хоть и читаю свободно по-английски, и понимаю по-украински, но, извините, так и не смог понять, на каком языке пишите вы. Очевидно, что какой-то славянский, но явно не русский. Видимо в этом причина нашего непонимания. :)
Построение фразы такое, что я так и не смог разгадать смысл конца вопроса. Есть у меня подозрение, что остальные тоже в таком же затруднении.

... причём тут UDP запрос?
Я подозревал, что я это напрасно сказал - как говорится, не в коня корм. Тебе же вроде уже посоветовали книжки почитать. Как тебе можно что-то объяснить, если ты даже основ не знаешь (начиная от самого языка).



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

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

Наверх




Память: 0.53 MB
Время: 0.035 c
14-1080208457
syte_ser78
2004-03-25 12:54
2004.04.18
Заставка перед загрузкой программы


6-1077123088
diMAN
2004-02-18 19:51
2004.04.18
Обмен данными client - server


1-1080705443
мыш
2004-03-31 07:57
2004.04.18
Глупое дерево


1-1080637863
гость с юга
2004-03-30 13:11
2004.04.18
как очистить DateTimePicker


4-1076593621
arbiter
2004-02-12 16:47
2004.04.18
Как определить тип окна?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский