Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2011, 00:38   #1
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
Стрелка Есть ли другои способ получения внешнего IP

вот нашел в инете такои вот способ получения IP, но так как он зависит от саита,
мне он не очень нравица, хотел бы узнать как по другому получить внешнии IP
Код:
function GetHTML(const AURL: string): string;
 var
   sHead,sHost,sPage: string;
   x,xCnt,xCntTotal: integer;
   sock: TClientSocket;
   ws: TWinSocketStream;
   ss: TStringStream;
   buff: array[0..4095] of char;
 const
   CrLf = #13#10;
 begin
   Result := '';
 
   sHost := AURL;
   x := Pos('//',sHost) ;
   if x > 0 then
     System.Delete(sHost,1,x+1) ;
   x := Pos('/',sHost) ;
   if x > 0 then
   begin
     sPage := Copy(sHost,x,Length(sHost)) ;
     System.Delete(sHost,x,Length(sHost)) ;
   end
   else
   begin
     sPage := '/';
   end;
 
   sock := TClientSocket.Create(nil) ;
   try
     try
       sock.ClientType := ctBlocking;
       sock.Port := 80;
       sock.Host := sHost;
       sock.Open;
 
       // установим задержку на 20 секунд
       ws := TWinSocketStream.Create(sock.Socket,20000) ;
       ss := TStringStream.Create('') ;
       try
         sHead := 'GET ' + sPage + ' HTTP/1.0 ' + CrLf + 
				'Host: ' + sHost + CrLf + CrLf;
         StrPCopy(buff,sHead) ;
 
         ws.Write(buff,Length(sHead) + 1) ;
         ws.Position := 0;
 
         FillChar(buff,SizeOf(buff),0) ;
         repeat
           xCnt := ws.Read(buff,SizeOf(buff)) ;
           xCntTotal := xCntTotal + xCnt;
           ss.Write(buff[0],xCnt) ;
         until xCnt = 0;
 
         Result := ss.DataString;
       finally
         ws.Free;
         ss.Free;
       end;
     except
   end;
   finally
     sock.Free;
   end;
 end;

procedure TForm1.Button1Click(Sender: TObject);
var
   ip: string;
 begin
   with TStringlist.Create do
   try
     Text := GetHTML('www.whatismyip.com/automation/n09230945.asp') ;
     if Count > 0 then ip := Strings[Count - 1];
   finally
     Free;
   end;
   ShowMessage('Ваш внешний адрес ip: ' + ip);
end;
как я понял без помоши какого либо сервера ето не зделать,
вот если возьмем мои TServerSocket, на друом компе под другим внешним IP,
как ето зделать?
___________________________________ ___________________________________ ___________________________________ ______________________
я тут немного почитал, по конектился и понял что мне на сервере(TServerSocket) нужна функция которая определяет IP клиента(TClientSocket)
если не ошибаюсь получать его надо здесь, вот только какои командои?
Код:
procedure TForm1.ServerSocket1GetSocket(Sender: TObject; Socket: Integer;
  var ClientSocket: TServerClientWinSocket);
begin
  ...
end;
я в курсе что на форуме етого много, но не прокатывало, и в блогах вроди нет, комбинаторикои тоже не попал
VirusN13

Последний раз редактировалось ArtGrek; 26.02.2011 в 02:34.
ArtGrek вне форума Ответить с цитированием
Старый 26.02.2011, 12:15   #2
KamiMAN
Пользователь
 
Регистрация: 25.02.2011
Сообщений: 13
По умолчанию

Как я понял тебе нужно статичный внешний IP? Может я неправильно понял, но всетаки... No-IP Дает компу постоянный внешний IP о_О
KamiMAN вне форума Ответить с цитированием
Старый 26.02.2011, 12:25   #3
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Код:
uses IdHTTP,SysUtils;

function GetExternalIP:String;
var IdHttp1:TIdHttp;
    s:String;
begin
 s:='0.0.0.0';
 IdHttp1:=TIdHttp.Create(nil);
 try
 s:= IdHttp1.Get('http://checkip.dyndns.org');
 s:=copy(s,Pos(':',s)+2,20);
 s:=copy(s,1,Pos('<',s)-1);
 finally
 FreeAndNil(IdHttp1);
 end;
 Result:=s;
end;
Только я так и не понял, нафиг тебе внешний IP понадобился.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 26.02.2011, 12:50   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Только я так и не понял, нафиг тебе внешний IP понадобился.
Во-во, это проблема клиента, а не сервера узнать, какой у сервера IP. Решается это от тупого прописывания IP руками, до установки no-ip/dyndns клиента (на сервере), который будет сам следить, чтобы твое доменное имя, присвоенное серверу, резолвилось в правильный IP.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 26.02.2011, 12:57   #5
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
Во-во, это проблема клиента, а не сервера узнать, какой у сервера IP.
ну а если вот надо мне, что нет способа?
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 26.02.2011, 13:48   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Объясните, зачем, и мы объясним, почему это вам не надо.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 26.02.2011, 14:43   #7
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

я зделаю прогу клиент-сервер, и какои то из моих клиентов мне нагадил, какои?
ну или просто хочу знать его ип, для того что б знать, неужели ето невозможно?
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 26.02.2011, 16:12   #8
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

По-моему вы сами не понимаете, что вам нужно. То речь шла про IP сервера, теперь про IP клиента. Вы можете понятно описать, что именно вы хотите сделать?

Получить IP клиента на сервере при подключении нового клиента? В OnClientConnect() передаётся сокет, у которого есть свойство RemoteAddress.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 26.02.2011, 16:45   #9
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
Получить IP клиента на сервере при подключении нового клиента? В OnClientConnect() передаётся сокет, у которого есть свойство RemoteAddress.
извеняюсь за неверное объяснение и спасибо за ответ то что нужно +

Код:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add('ClientConnect');
  Memo1.Lines.Add(Socket.RemoteAddress);
end;
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 26.02.2011, 16:46   #10
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Грамотно поставленный вопрос — 90% ответа )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WPF пропуск кадров. Есть ли способ предотвратить? Casper-SC Общие вопросы .NET 0 09.06.2010 20:16
Есть ли способ узнать, кто вызвал скрипт? motorway PHP 5 08.07.2009 09:16
Помгите записать температуру процесорра в дб. Способ получения обсалютно любой! Geddar Помощь студентам 2 22.04.2009 13:24
перенос програми на другои компютер bmb_66 БД в Delphi 4 08.04.2008 08:18