Форум: "Сети";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];
ВнизУзнать IP у удаленного компа(TCP/IP) Найти похожие ветки
← →
pirate (2004-10-08 19:27) [0]Программа-сервер запущена на компе A.
Программа-клиент - на компе B.
И сервер и клиент знают IP своего компа, но не знают противоположного. Т.е. сервер не знает IP клиента, и наоборот.
Но им просто неоходимо связаться.
Что же делать? Отправлять пакеты всем компам ip кот. лежит
в диапазоне от 127.0.0.2 до 255.255.255.0 ?
Глупо.
Вот и решил, друзья мои, обратиться к вам за помощью.
← →
P@$l-l0l-( (2004-10-08 20:29) [1]ну скорее всего сервер тебе придётся установить на каком-то компе, который всё время в сети. А иначе пидётся сканировать всевозможные диапазоны адресов. Если клиент ищет сервера, зная, что тот висит у кокого-нибудь прова, то можно узнать диапазан адресов прова и их просканировать. Я тоже задавался этим вопросом, но так в своих размышлениях ни к чемы и не пишёл.
← →
Reindeer Moss Eater © (2004-10-08 20:31) [2]Есть детские сады в городе N и есть детсадовские малыши которые ходят в эти сады.
Каждый из них знает свой адрес. И детсадовский малыш и садик.
Но им просто необходимо попасть каждому в свой садик.
Что делать?
Обходить все садики в надежде случайно попасть в свой?
И вот решил обратится к вам, друзья мои, за помощью.
← →
XProger © (2004-10-09 00:45) [3]Если это для локалки, то клиент может послать в сеть BROADCAST пакет.
Сервер ловит его, берёт из пакета IP отправителя, и посылает ему свой IP. А дальше тебе решать... :)
← →
pirate (2004-10-09 13:04) [4]Reindeer Moss Eater: Я тоже люблю попоясничать, но сейчас не до этого.
XProger: Как отослать BROADCAST пакет?
← →
Defunct © (2004-10-09 14:07) [5]> Как отослать BROADCAST пакет?
FChannelName := "255.255.255.255"
UDPServer.Socket.SendBuffer(FChanelName, FPort, SFrame, Size )
← →
XProger © (2004-10-09 17:23) [6]А так без компонентов:
procedure SendBroadCast;
var Init:TWSAData;
SockOpt:BOOL;
Sock:TSocket;
Target:TSockAddrIn;
begin
WSAStartup($101,Init);
Sock:=Socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
SockOpt:=TRUE;
SetSockOpt(Sock,SOL_SOCKET,SO_BROADCAST,PChar(@SockOpt),SizeOf(SockOpt)) ;
Target.sin_port:=htons(8167);//номер порта
Target.sin_addr.S_addr:=INADDR_BROADCAST;
Target.sa_family:=AF_INET;
SendTo(Sock,Data,DataBytes,0,Target,SizeOf(Target));
WSACleanup;
end;
← →
Verg © (2004-10-09 17:31) [7]И как же это поможет выяснить адрес сервера?
> в диапазоне от 127.0.0.2 до 255.255.255.0 ?
> Глупо.
← →
XProger © (2004-10-11 02:14) [8]Сервер получит этот пакет. Вытащит из него дарес отправителя (клиента) и пошлёт ему пакет авторизации, который получит клиент и вытащит из него IP адрес сервера 8)
← →
Reindeer Moss Eater © (2004-10-11 08:43) [9]Что же делать? Отправлять пакеты всем компам ip кот. лежит
в диапазоне от 127.0.0.2 до 255.255.255.0 ?
Отсюда делаем вывод, что интересуют сервера не только в собственной сети, а и за ее пределами.
Вспоминаем, что бродкасты между сетями никто по умолчанию не транслирует.
Так что действительно. Глупо.
← →
Imageman (2004-10-11 12:15) [10]можно попробовать сделать некий третий компьютер. На этом третьем компе сделать, например, html страницу, на которой будут указаны IP адреса клиента и сервера. Или ftp сервер, на котором лежат файлы IP_server.txt и IP_client.txt.
Этот третий компьютер будет постоянно включен и доступен либо через DNS, либо по известному IP. Сделать такую схему можно у большинства бесплатных хостинг провайдеров.
← →
pirate (2004-10-11 13:18) [11]В процедуре:
procedure SendBroadCast;
var Init:TWSAData;
SockOpt:BOOL;
Sock:TSocket;
Target:TSockAddrIn;
begin
WSAStartup($101,Init);
<<Выдает ошибку типа Access vilation error $#%76375493
Sock:=Socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
SockOpt:=TRUE;
SetSockOpt(Sock,SOL_SOCKET,SO_BROADCAST,PChar(@SockOpt),SizeOf(SockOpt)) ;
Target.sin_port:=htons(8167);//номер порта
Target.sin_addr.S_addr:=INADDR_BROADCAST;
Target.sa_family:=AF_INET;
SendTo(Sock,Data,DataBytes,0,Target,SizeOf(Target));
<<Не нашел Data и DataBytes
WSACleanup;
end;
← →
Reindeer Moss Eater © (2004-10-11 13:18) [12]Ага.
И останется решить задачу - узнать адрес "третьего" сервера.
← →
pirate (2004-10-11 13:26) [13]Я использую TTcpServer и TTcpClient.
Один на сервере другой на клиенте соответственно.
В ip диапазонах я не шарю, не знаю какие для локалок, какие для инета и т.д.
Программа-срвр висит на одном из компов локалки, а клиент на другом.
Им надо законнектиться друг с другом, передать пару строк друг другу и вырубиться.
Я только начинаю разбираться с сетевыми примочками, так что прошу не обижаться за глупые вопросы.
И так: КАК Корректно отправить этот BroadCast-пакет?
← →
pirate (2004-10-16 10:59) [14]Обидно.
Полная *?:%;№"!) !
Я долго мучился, но ничего сделать путного не смог.
Итак, у кого-нибудь есть идеи?
Предложения?
← →
Verg © (2004-10-16 14:56) [15]
> WSAStartup($101,Init);
> <<Выдает ошибку типа Access vilation error $#%76375493
>
Кто? Прямо WSAStartup выдает Access vilation ?
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.043 c