TERMINAL SERVICE - PEGAR IP

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Reginaldo
Usuário Nível 2
Usuário Nível 2
Mensagens: 71
Registrado em: 14 Jul 2004 08:06
Localização: Lagoa da Prata - MG
Contato:

TERMINAL SERVICE - PEGAR IP

Mensagem por Reginaldo »

Olá pessoal,

Já consegui instalar e testar o terminal server, usando como servidor o windows 2003 server. Porém, estou com um pequeno problema....

Preciso identificar a máquina que está acessando o sistema! Quando era Clipper, eu usava uma variável de ambiente (SET MAQUINA=01) no autoexec, porém no terminal service isso não funciona, pois irá me retornar sempre o mesmo SET MAQUINA, visto que a aplicação está sendo executada no servidor... Tentei uma rotina que me exibe o IP, mas também veio o mesmo problema, só me exibe o IP do servidor...

Alguém aqui conhece alguma solução para esse problema, ou seja, preciso saber qual é o IP do terminal e não do servidor...

Obrigado pela atenção, aguardo resposta..
Reginaldo J. Silva
Analista de Sistemas
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: TERMINAL SERVICE - PEGAR IP

Mensagem por sygecom »

Reginaldo escreveu:Olá pessoal,

Já consegui instalar e testar o terminal server, usando como servidor o windows 2003 server. Porém, estou com um pequeno problema....

Preciso identificar a máquina que está acessando o sistema! Quando era Clipper, eu usava uma variável de ambiente (SET MAQUINA=01) no autoexec, porém no terminal service isso não funciona, pois irá me retornar sempre o mesmo SET MAQUINA, visto que a aplicação está sendo executada no servidor... Tentei uma rotina que me exibe o IP, mas também veio o mesmo problema, só me exibe o IP do servidor...

Alguém aqui conhece alguma solução para esse problema, ou seja, preciso saber qual é o IP do terminal e não do servidor...

Obrigado pela atenção, aguardo resposta..
Tche, meu caso é parecido com o seu, eu uso arquivos temporarios em maquinas local...quando esta em rede...agora quando é executado pelo TS eu uso a função : Os_IsWtsClient() = .T. para saber que esta rodando no TS e dai muda a pasta temporaria dos arquivos que meu sistema gera.

Sugestão...quando seu sistema indentificar que esta no TSCLIENT ele gera um MAQUINA a mais do que já tem...claro que vc tera que criar um DBF por exemplo para os usuario na rede confirmar que estão logado....nessa função...vc soh bloqueia um registro e reserva o proximo que não estiver bloqueado...entendeu ?

Espero pelomenos ter dado uma luz.

Abraços
Leonardo Machado
MAQUINA=vTeste+1
Endif
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
TerraSoftware
Usuário Nível 3
Usuário Nível 3
Mensagens: 353
Registrado em: 28 Jul 2004 13:14
Localização: Cianorte-PR
Contato:

Mensagem por TerraSoftware »

Vc tambem pode fazer testes com as seguintes variaveis de ambiente:

getenv("CLIENTNAME")
getenv("SESSIONNAME")
www.sisterra.com.br
xHarbour 1.0.0 - Bcc 6.3 - Gtwvw/Hwgui
DbfCdx/MySql
Reginaldo
Usuário Nível 2
Usuário Nível 2
Mensagens: 71
Registrado em: 14 Jul 2004 08:06
Localização: Lagoa da Prata - MG
Contato:

Mensagem por Reginaldo »

Caros colegas,

Obrigado pela atenção!

Leonardo,
Não entendi o porque da função Os_IsWtsClient() = .T.


TerraSoftware,
A getenv("CLIENTNAME") no terminal service retorna o nome da máquina, beleza, já me ajuda... porém na rede local retorna "console", já a getenv("SESSIONNAME"), na rede local me retorna também "console", no terminal service, retorna: RDP-Tcp#... isso eu não entendi...

Posso conseguir o que quero com a variável CLIENTNAME... Mas, se alguém tiver uma forma de poder pegar o IP, seria melhor...

Obrigado pela atenção de todos,
Reginaldo J. Silva
Analista de Sistemas
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Reginaldo escreveu:Caros colegas,

Obrigado pela atenção!

Leonardo,
Não entendi o porque da função Os_IsWtsClient() = .T.
Tche, segue abaixo um exemplo usando o Os_IsWtsClient() = .T.:

Código: Selecionar todos

IF Os_IsWtsClient() = .T.
    Sua Rotina que vai diferenciar a MAQUINA.(obs:cria um dbf para validar as maquinas se for prescisso)
ENDIF
Abaixo o exemplo xharbour\tests\wincheck.prg

Código: Selecionar todos

PROCEDURE MAIN()
   LOCAL nResult:= 0, a, x
   CLS
   ? 'Checking Windows Version & Platform Details'
   ? '-------------------------------------------'
   ?
   ?? 'Platform is: '
   IF OS_ISWINNT()
      ?? "VER_PLATFORM_WIN32_NT. i.e. NT, 2000, XP or 2003 Server"
   ELSEIF OS_ISWIN9X()
      ?? "VER_PLATFORM_WIN32_WINDOWS. i.e. 95, 98 or ME"
   ELSE
      ?? "UNKNOWN?????????"
   ENDIF
   ?
   ? 'Release Version of Windows is: '
   DO CASE
   CASE OS_ISWIN95()
      ?? "95"
   CASE OS_ISWIN98()
      ?? "98"
   CASE OS_ISWINME()
      ?? "ME"
   CASE OS_ISWINNT351()
      ?? "NT3.51"
   CASE OS_ISWINNT4()
      ?? "NT4.00"
   CASE OS_ISWIN2000()
      ?? "2000"
   CASE OS_ISWINXP()
      ?? "XP"
   CASE OS_ISWIN2003()
      ?? "2003 Server"
   OTHERWISE
      ?? "UNKNOWN"
   ENDCASE

   ?
   ? 'Details of version'
   a:= os_versioninfo()
   IF !EMPTY( a )
      ? "   MajorVersion: ", a[ 1 ]
      ? "   MinorVersion: ", a[ 2 ]
      ? "    BuildNumber: ", a[ 3 ]
      ? "     PlatformId: ", a[ 4 ]
      ? "      ExtraData: ", a[ 5 ]
   ENDIF
   ?
   IF OS_ISWTSCLIENT()
      ? "Running as a Windows Terminal Server Client"
   ELSE
      ? "NO Windows Terminal Server Client detected"
   ENDIF

   ?
   ? 'Checking and setting network for Windows'
   ? '----------------------------------------'
   ?
   IF OS_ISWTSCLIENT() .AND. !OS_NETREGOK() // Note: If Windows Terminal Server client DONOT
                                            //       attempt to set registry.
     ? 'Registry on WTS server is not set correctly for networking.'
     ? 'Please check with System Administrator to set the registry correctly.'
   ELSEIF OS_NETREGOK( .T. )
     ? 'Registry set OK for networking'
   ELSE
     ? 'Failed to set registry - May need "Administrator" rights'
   ENDIF
   ?

   IF !OS_NETVREDIROK( @nResult )
      ? 'Invalid RVREDIR.VXD file installed'
      IF nResult = 950
         ? 'You need file VREDRUPD.EXE if your vredir.vxd is dated "09:50:00"'
      ELSEIF nResult == 1111
         ? 'You need file VRDRUPD.EXE if your vredir.vxd is dated "11:11:10"'
      ENDIF
   ENDIF

   WAIT

RETURN
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Sobre como usar o IP de uma procura em INetConnectIP()...

INetConnectIP( 192.168.254.62, 3302 ) --> pSocket
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Ops...falha....seria isso....

INetConnectIP( <cIPAddress>, <nPort> ) --> pSocket

Abraços
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Reginaldo
Usuário Nível 2
Usuário Nível 2
Mensagens: 71
Registrado em: 14 Jul 2004 08:06
Localização: Lagoa da Prata - MG
Contato:

Mensagem por Reginaldo »

Caro Leonardo,

Essas funções INET... não funcionam bem no TS...

t+
Reginaldo J. Silva
Analista de Sistemas
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Lamento tentei ajudar....agora vc pode dar uma olhada tb. nos exemplos udpclient.prg e udpserver.prg que se encontra em xharbour\tests
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder