#INCLUDE 'TOTVS.CH'
// --------------------------------------------
// Exemplo de conexão via Socket, neste caso
// será conectado um socket em Delphi via AdvPL
// --------------------------------------------
User Function SocketTest()
Local oObj := tSocketClient():New()
Local nX := 0
// -------------------------------
// Tenta conectar 3 vezes
// -------------------------------
For nX := 1 to 3
nPort := 812
nIp := 'localhost'
NewCria o objeto TSocketClient sem conexão ativa.TSocketClient(): New ( ) --> oRetorno oRetorno() - Retorna um objeto do tipo TSocketClient.
CloseConnectionEncerra a conexão TCP genérica (socket) do objeto corrente.TSocketClient(): CloseConnection ( ) --> ConnectEstabelece uma conexão TCP genérica (socket).TSocketClient(): Connect ( < nPorta>, < cIP>, < nTimeout> ) --> nRetorno |
Nome | Tipo | Descrição | Obrigatório | Referência |
nPorta | Numérico | Indica o número da porta onde a conexão será realizada. | X | cIP | Caracter | Indica o número IP ou nome do servidor onde a conexão será realizada. | X | nTimeout | Numérico | Indica o número em milissegundos onde o método deve esperar para conectar. | X | nRetorno() - Retorna 0 (zero) se conectar com sucesso; caso contrário, a conexão falhou.
GetError
Permite recuperar um código e uma string correspondendo à ultima ocorrência do Socket client registrada em caso de falha.
TSocketClient(): GetError ( ) --> cRetorno
cRetorno(caracter) - Retorna um código e uma string que corresponde à última ocorrência de SocketClient registrada em caso de falha. Caso não haja nenhuma falha registrada, a função retorna 0 (zero).
Método disponível em build superior a 7.00.101202A.
IsConnected
Verifica se existe conexão válida no objeto corrente.
TSocketClient(): IsConnected ( ) --> lRetorno
lRetorno(logico) - Retornar verdadeiro (.T.), se a conexão estiver ativa, ou falso (.F.), caso esteja inválida/desconectado.
Receive
Recebe qualquer tipo de dado pela conexão ativa do objeto.
TSocketClient(): Receive ( < cBuffer>, < nTimeout> ) --> nRetorno
Nome | Tipo | Descrição | Obrigatório | Referência |
cBuffer | Caracter | Indica o buffer que contém os dados a serem recebidos. | X | nTimeout | Numérico | Indica o tempo em milissegundos, que o método receive aguarda, para receber algum dado pela conexão. | X | nRetorno() - Retorna a quantidade de bytes recebidos. Caso ocorra algum erro, a quantidade recebida será menor que zero.
Reset
Encerra a conexão sem avisar o outro lado.
TSocketClient(): Reset ( ) -->
Utilize este método somente em casos extremos.
Send
Transmite o buffer pela conexão TCP genérica ativa.
TSocketClient(): Send ( [ cBuffer] ) --> nRetorno
Nome | Tipo | Descrição | Obrigatório | Referência |
cBuffer | Caracter | Indica a buffer que contém os dados que serão transmitidos pela conexão. | nRetorno() - Retorna o número de bytes transmitidos. Caso o número seja diferente do tamanho especificado, no parâmetro cBuffer, algum erro aconteceu.
//Neste exemplo, observe a utilização de um cliente socket, note que para o programa funcionar corretamente, deve-se alterar os parâmetros da conexão.user function MySocketLocal oObj := tSocketClient():New()nResp := oObj:Connect(
999nPort,nIp,
"172.255.255.255", 1000 ) if(nResp == 0 ) Conout( "Conexão OK!" )else Conout( "Erro na Conexão OK! ", nResp ) returnendifcSend = "Ola!!!! Estou transmitindo um dado!"nResp := oObj:Send( cSend )if( nResp != len( cSend ) ) 10 )
// -------------------------------
// Se conectou abandona o FOR
// -------------------------------
if(nResp == 0 )
exit
else
conout("--> Tentativa de Conexão: " + StrZero(nX,3))
Sleep(2000)
continue
endif
Next
conout(
"Erro!
Dado
nao
transmitido" )else conout( "Dado Enviado" )endifcBuffer := ""nQtd = oObj:Receive( cBuffer, 10000 ) if( nQtd >= 0 ) conout( "Dados Recebidos " + Str( nQtd, 4, 0 ), cBuffer )else conout( "Nao recebi nada" )endifcSend = "Dados que será transmitido!!!"
// --------------------------------------
// Verifica se a conexão foi bem sucedida
// --------------------------------------
if( !oObj:IsConnected() )
conout("--> Falha na conexão")
return
else
conout("--> Conexão OK")
endif
// -------------------------------
// Teste de envio para o socket
// -------------------------------
cSend := "Dados enviados pelo AdvPL..."
nResp := oObj:Send( cSend )
if( nResp != len( cSend ) )
conout( "--> Erro! Dado
naonão transmitido" )
else
conout( "--> Dado Enviado - Retorno: "
)endifif( oObj:IsConnected() ) conout( "OK! Estou conectado" )else +StrZero(nResp,5) )
endif
// -------------------------------
// Teste de recebimento do socket
// -------------------------------
cBuffer := ""
nResp = oObj:Receive( @cBuffer, 10000 )
if( nResp >= 0 )
conout( "
Ops! Nao estou conectado" )endifoObj:CloseConnection()if( !oObj:IsConnected() )--> Dados Recebidos " + StrZero(nResp,5) )
conout( "--> ["+cBuffer+"
Desconectei]" )
else
conout( "
Ainda-->
estouNão
conectado, erro na desconexaorecebi dados" )
endif
// -------------------------------
// Fecha conexão
// -------------------------------
oObj:CloseConnection()
conout( "--> Conexão
return Advanced Protheus 6.09 , Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10 , ByYou Application Server fechada" )
Return