Página 1 de 1

TERMINAL SERVICE - PEGAR IP

Enviado: 24 Jul 2007 17:07
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..

Re: TERMINAL SERVICE - PEGAR IP

Enviado: 24 Jul 2007 18:47
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

Enviado: 25 Jul 2007 08:56
por TerraSoftware
Vc tambem pode fazer testes com as seguintes variaveis de ambiente:

getenv("CLIENTNAME")
getenv("SESSIONNAME")

Enviado: 25 Jul 2007 18:17
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,

Enviado: 25 Jul 2007 19:05
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

Enviado: 25 Jul 2007 19:09
por sygecom
Sobre como usar o IP de uma procura em INetConnectIP()...

INetConnectIP( 192.168.254.62, 3302 ) --> pSocket

Enviado: 25 Jul 2007 19:13
por sygecom
Ops...falha....seria isso....

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

Abraços

Enviado: 26 Jul 2007 09:34
por Reginaldo
Caro Leonardo,

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

t+

Enviado: 26 Jul 2007 10:36
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