Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.02;
Скачать: CL | DM;

Вниз

Узнать 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.042 c
3-1102261157
sunvit
2004-12-05 18:39
2005.01.02
Как сохранить изменения на сервере Oracle


9-1094900894
Navi
2004-09-11 15:08
2005.01.02
Линия в ОpenGL


4-1100421266
oens
2004-11-14 11:34
2005.01.02
клавиатура


6-1097940533
Kross
2004-10-16 19:28
2005.01.02
Оперделение доступных ресурсво по названию компьютера


14-1102909771
Думкин
2004-12-13 06:49
2005.01.02
С днем рождения! 13 декабря