![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Узнать IP у удаленного компа(TCP/IP) [WinXP]
pirate © (2004-10-08 19:27:00)Программа-сервер запущена на компе A.
Программа-клиент - на компе B.
И сервер и клиент знают IP своего компа, но не знают противоположного. Т.е. сервер не знает IP клиента, и наоборот.
Но им просто неоходимо связаться.
Что же делать? Отправлять пакеты всем компам ip кот. лежит
в диапазоне от 127.0.0.2 до 255.255.255.0 ?
Глупо.
Вот и решил, друзья мои, обратиться к вам за помощью.
Verg (2004-10-16 14:56:00) [1]
> WSAStartup($101,Init);
> <<Выдает ошибку типа Access vilation error $#%76375493
>
Кто? Прямо WSAStartup выдает Access vilation ?
pirate (2004-10-16 10:59:00) [2]Обидно.
Полная *?:%;№"!) !
Я долго мучился, но ничего сделать путного не смог.
Итак, у кого-нибудь есть идеи?
Предложения?
pirate (2004-10-11 13:26:00) [3]Я использую TTcpServer и TTcpClient.
Один на сервере другой на клиенте соответственно.
В ip диапазонах я не шарю, не знаю какие для локалок, какие для инета и т.д.
Программа-срвр висит на одном из компов локалки, а клиент на другом.
Им надо законнектиться друг с другом, передать пару строк друг другу и вырубиться.
Я только начинаю разбираться с сетевыми примочками, так что прошу не обижаться за глупые вопросы.
И так: КАК Корректно отправить этот BroadCast-пакет?
pirate (2004-10-11 13:18:00) [4]В процедуре:
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:00) [5]Ага.
И останется решить задачу - узнать адрес "третьего" сервера.
Imageman (2004-10-11 12:15:00) [6]можно попробовать сделать некий третий компьютер. На этом третьем компе сделать, например, html страницу, на которой будут указаны IP адреса клиента и сервера. Или ftp сервер, на котором лежат файлы IP_server.txt и IP_client.txt.
Этот третий компьютер будет постоянно включен и доступен либо через DNS, либо по известному IP. Сделать такую схему можно у большинства бесплатных хостинг провайдеров.
Reindeer Moss Eater (2004-10-11 08:43:00) [7]Что же делать? Отправлять пакеты всем компам ip кот. лежит
в диапазоне от 127.0.0.2 до 255.255.255.0 ?
Отсюда делаем вывод, что интересуют сервера не только в собственной сети, а и за ее пределами.
Вспоминаем, что бродкасты между сетями никто по умолчанию не транслирует.
Так что действительно. Глупо.
XProger (2004-10-11 02:14:00) [8]Сервер получит этот пакет. Вытащит из него дарес отправителя (клиента) и пошлёт ему пакет авторизации, который получит клиент и вытащит из него IP адрес сервера 8)
Verg (2004-10-09 17:31:00) [9]И как же это поможет выяснить адрес сервера?
> в диапазоне от 127.0.0.2 до 255.255.255.0 ?
> Глупо.
XProger (2004-10-09 17:23:00) [10]А так без компонентов:
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;
Defunct (2004-10-09 14:07:00) [11]> Как отослать BROADCAST пакет?
FChannelName := '255.255.255.255'
UDPServer.Socket.SendBuffer(FChanelName, FPort, SFrame, Size )
pirate (2004-10-09 13:04:00) [12]Reindeer Moss Eater: Я тоже люблю попоясничать, но сейчас не до этого.
XProger: Как отослать BROADCAST пакет?
XProger (2004-10-09 00:45:00) [13]Если это для локалки, то клиент может послать в сеть BROADCAST пакет.
Сервер ловит его, берёт из пакета IP отправителя, и посылает ему свой IP. А дальше тебе решать... :)
Reindeer Moss Eater (2004-10-08 20:31:00) [14]Есть детские сады в городе N и есть детсадовские малыши которые ходят в эти сады.
Каждый из них знает свой адрес. И детсадовский малыш и садик.
Но им просто необходимо попасть каждому в свой садик.
Что делать?
Обходить все садики в надежде случайно попасть в свой?
И вот решил обратится к вам, друзья мои, за помощью.
P@$l-l0l-( (2004-10-08 20:29:00) [15]ну скорее всего сервер тебе придётся установить на каком-то компе, который всё время в сети. А иначе пидётся сканировать всевозможные диапазоны адресов. Если клиент ищет сервера, зная, что тот висит у кокого-нибудь прова, то можно узнать диапазан адресов прова и их просканировать. Я тоже задавался этим вопросом, но так в своих размышлениях ни к чемы и не пишёл.