IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Delphi создание удаленной БД (http://www.imho.ws/showthread.php?t=94425)

Galush 19.10.2005 08:57

Delphi создание удаленной БД
 
Привет всем!
Меня интересуте такой вот интересный вопрос.
Как получить список клиентов(IP адрес компа, имя компа и др.) которые подключились к серверу БД?
На сервере используются компоненты: DataBase, table, session, provider.
НА клиенте: SocketConnection, ClientDataSet

_Lynx_ 19.10.2005 23:00

А какая БД используется?
Можно в сценарии подключения прописать...
Т.е. серверная часть тоже присутствует?
А для простоты при подключении можешь записывать эти данные в некоторую таблицу.

Galush 20.10.2005 06:12

Цитата:

_Lynx_:
А какая БД используется?
БД я использовал PARADOX
Хоть как нить надо вычислить подлючившихся юзеров!!! :help:

ЕЖ 20.10.2005 11:56

На сколько я понимаю есть клиент-серверное приложение на Delphi/C++Builder, сервер которого просто использует файлы-таблицы формата Paradox (*.db), а не полноценный сервер SQL с авторизацией пользователей.

В таком случае видимо следует организвать идентификацию пользователей в самой серверной части приложения, а клиентам для получения доступа к данным авторизовать себя. Через это и получать информацию о них.

Galush 21.10.2005 06:57

ОК! Тогда вопрос такой. Как сделать так, что бы при подключении клиент не сам забивал свои IP или ИмяКомпа, клиентское приложение само доставало информацию об IP и с того компа откуда была запущена клиентская программа.
(НУЖЕН КОД) :help:

ЕЖ 21.10.2005 10:54

Яndex...
Код:

uses
  WinSock;

function LocalIP: string;
type
  TaPInAddr = array[0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  Buffer: array[0..63] of Char;
  I: Integer;
  GInitData: TWSAData;
begin
  WSAStartup($101, GInitData);
  Result := '';
  GetHostName(Buffer, SizeOf(Buffer));
  phe := GetHostByName(buffer);
  if phe = nil then Exit;
  pPtr := PaPInAddr(phe^.h_addr_list);
  I := 0;
  while pPtr^[I] <> nil do
  begin
    Result := inet_ntoa(pptr^[I]^);
    Inc(I);
  end;
  WSACleanup;
end;

function IPAddrToName(IPAddr: string): string;
var
  SockAddrIn: TSockAddrIn;
  HostEnt: PHostEnt;
  WSAData: TWSAData;
begin
  WSAStartup($101, WSAData);
  SockAddrIn.sin_addr.s_addr := inet_addr(PChar(IPAddr));
  HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
  if HostEnt <> nil then
    Result := StrPas(Hostent^.h_name)
  else
    Result := '';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IPAddrToName(LocalIp));
end;

{**************************************}

// Function to get the IP Address from a Host

function GetIPFromHost(const HostName: string): string;
type
  TaPInAddr = array[0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  i: Integer;
  GInitData: TWSAData;
begin
  WSAStartup($101, GInitData);
  Result := '';
  phe := GetHostByName(PChar(HostName));
  if phe = nil then Exit;
  pPtr := PaPInAddr(phe^.h_addr_list);
  i := 0;
  while pPtr^[i] <> nil do
  begin
    Result := inet_ntoa(pptr^[i]^);
    Inc(i);
  end;
  WSACleanup;
end;


Galush 21.10.2005 11:30

Теперь по нажатию BUTTONA появляется мессаге в котором выводится только имя компа. Внимание вопрос: Что надо прописать чтобы появлялось сообщение в котором бы содержался IP?

ЕЖ 21.10.2005 11:43

Ну ёлки палки, как же ты пишешь многопользовательское приложение с БД, если не можешь разобраться в кусочке кода?
Цитата:

Galush:
Теперь по нажатию BUTTONA появляется мессаге в котором выводится только имя компа. Внимание вопрос: Что надо прописать чтобы появлялось сообщение в котором бы содержался IP?
Убери в ShowMessage(IPAddrToName(LocalIp)) IPAddrToName

Galush 21.10.2005 11:55

ОК!!! все работает!!!


Часовой пояс GMT +4, время: 13:17.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.