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