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

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

Узнать 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]

ну скорее всего сервер тебе придётся установить на каком-то компе, который всё время в сети. А иначе пидётся сканировать всевозможные диапазоны адресов. Если клиент ищет сервера, зная, что тот висит у кокого-нибудь прова, то можно узнать диапазан адресов прова и их просканировать. Я тоже задавался этим вопросом, но так в своих размышлениях ни к чемы и не пишёл.


Наверх

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