Controles de Internet

A aba Internet fornece 9 controles para navegacao web, rede HTTP/FTP, email, comunicacao WebSocket e programacao de sockets TCP/UDP. Todos os controles sao multiplataforma e usam I/O nao-bloqueante internamente.

TWebView CT_WEBVIEW = 62

Incorpora um navegador web completo dentro de um formulario. Renderiza conteudo HTML ou navega para URLs usando o motor web nativo da plataforma.

PropriedadeTipoPadraoDescricao
cURLString""URL para navegar
cHTMLString""Conteudo HTML bruto para renderizar
lCanGoBackLogico.F.Se o historico de navegacao permite voltar (somente leitura)
lCanGoForwardLogico.F.Se o historico de navegacao permite avancar (somente leitura)
cTitleString""Titulo da pagina (somente leitura)
EventoCategoriaDescricao
OnNavigateNavegacaoDisparado antes de navegar para uma nova URL. Retorne .F. para cancelar
OnLoadNavegacaoPagina terminou de carregar
OnErrorErroErro de navegacao ou renderizacao ocorreu
PlataformaWidget Nativo
WindowsWebView2 (Chromium-based Edge)
macOSWKWebView (WebKit)
LinuxWebKitGTK (WebKit2)

TWebServer CT_WEBSERVER = 71

Servidor HTTP/HTTPS incorporado. Permite que sua aplicacao sirva paginas web, APIs REST, ou atue como endpoint de servico local.

PropriedadeTipoPadraoDescricao
nPortNumero8080Numero da porta de escuta
cHostString"0.0.0.0"Endereco de vinculacao
cDocumentRootString""Diretorio raiz para arquivos estaticos
lSSLLogico.F.Habilitar HTTPS
cCertFileString""Caminho para o arquivo de certificado SSL
cKeyFileString""Caminho para o arquivo de chave privada SSL
nMaxConnectionsNumero256Numero maximo de conexoes simultaneas
EventoCategoriaDescricao
OnRequestAcaoRequisicao HTTP recebada. Params: oRequest, oResponse
OnConnectConexaoNovo cliente conectado
OnDisconnectConexaoCliente desconectado
OnStartCiclo de VidaServidor comecou a escutar
OnStopCiclo de VidaServidor parado
OnErrorErroErro do servidor ocorreu

TWebSocket CT_WEBSOCKET = 72

Cliente WebSocket para comunicacao bidirecional em tempo real com um servidor.

PropriedadeTipoPadraoDescricao
cURLString""URL do servidor WebSocket (ws:// ou wss://)
cProtocolString""Sub-protocolo para negociar
lAutoReconnectLogico.F.Reconectar automaticamente na desconexao
nReconnectDelayNumero3000Atraso em ms antes da tentativa de reconexao
EventoCategoriaDescricao
OnOpenConexaoConexao estabelecida
OnMessageDadosMensagem recebida do servidor
OnCloseConexaoConexao fechada
OnErrorErroErro de conexao ou protocolo

THttpClient CT_HTTPCLIENT = 73

Cliente HTTP para fazer chamadas de API REST, baixar arquivos e comunicacao HTTP geral.

PropriedadeTipoPadraoDescricao
cURLString""URL da requisicao
cMethodString"GET"Metodo HTTP (GET, POST, PUT, DELETE, PATCH)
aHeadersArray{}Headers da requisicao como pares chave-valor
cBodyString""Conteudo do corpo da requisicao
nTimeoutNumero30000Timeout da requisicao em milissegundos
nStatusCodeNumero0Codigo de status da resposta (somente leitura)
EventoCategoriaDescricao
OnResponseDadosResposta recebida. Params: nStatus, cBody, aHeaders
OnProgressDadosProgresso de download/upload. Params: nCurrent, nTotal
OnErrorErroRequisicao falhou

TFtpClient CT_FTPCLIENT = 74

Cliente FTP/FTPS para operacoes de transferencia de arquivos.

PropriedadeTipoPadraoDescricao
cHostString""Hostname do servidor FTP
nPortNumero21Porta do servidor
cUserString""Nome de usuario de login
cPasswordString""Senha de login
lPassiveModeLogico.T.Usar modo passivo para transferencias de dados
lSSLLogico.F.Usar FTPS (FTP sobre TLS)
EventoCategoriaDescricao
OnConnectConexaoConectado com sucesso ao servidor
OnTransferDadosProgresso da transferencia de arquivo. Params: cFile, nBytes, nTotal
OnErrorErroErro de conexao ou transferencia

TSmtpClient CT_SMTPCLIENT = 75

Cliente SMTP para enviar mensagens de email com anexos.

PropriedadeTipoPadraoDescricao
cHostString""Hostname do servidor SMTP
nPortNumero587Porta do servidor (25, 465 ou 587)
lSSLLogico.T.Usar criptografia TLS/SSL
cUserString""Nome de usuario de autenticacao
cPasswordString""Senha de autenticacao
cFromString""Endereco de email do remetente
cToString""Endereco(s) de email do destinatario, separados por virgula
cSubjectString""Linha de assunto do email
cBodyString""Conteudo do corpo do email
EventoCategoriaDescricao
OnSendAcaoEmail enviado com sucesso
OnErrorErroErro de envio ou conexao

TTcpServer CT_TCPSERVER = 76

Servidor socket TCP. Escuta por conexoes de entrada e gerencia multiplos clientes.

PropriedadeTipoPadraoDescricao
nPortNumero0Porta de escuta
cHostString"0.0.0.0"Endereco de vinculacao
nMaxConnectionsNumero128Numero maximo de conexoes simultaneas
lActiveLogico.F.Servidor esta escutando no momento (somente leitura)
EventoCategoriaDescricao
OnAcceptConexaoNova conexao de cliente aceita. Params: oClient
OnReceiveDadosDados recebidos do cliente. Params: oClient, cData
OnDisconnectConexaoCliente desconectado. Params: oClient

TTcpClient CT_TCPCLIENT = 77

Cliente socket TCP. Conecta a um servidor remoto para comunicacao baseada em stream.

PropriedadeTipoPadraoDescricao
cHostString""Hostname ou IP do servidor remoto
nPortNumero0Porta do servidor remoto
nTimeoutNumero10000Timeout de conexao em milissegundos
lConnectedLogico.F.Status da conexao (somente leitura)
EventoCategoriaDescricao
OnConnectConexaoConectado com sucesso ao servidor
OnReceiveDadosDados recebidos do servidor. Params: cData
OnDisconnectConexaoDesconectado do servidor

TUdpSocket CT_UDPSOCKET = 78

Socket UDP datagram para comunicacao sem conexao, de baixa latencia.

PropriedadeTipoPadraoDescricao
nPortNumero0Porta local para vincular
lBroadcastLogico.F.Habilitar modo broadcast
cHostString"0.0.0.0"Endereco de vinculacao
EventoCategoriaDescricao
OnReceiveDadosDatagrama recebido. Params: cData, cSenderIP, nSenderPort

Exemplo de Codigo: Servidor Web Simples

// Um servidor web simples que responde a requisicoes HTTP

FUNCTION Main()

   LOCAL oServer

   oServer := TWebServer():New()
   oServer:nPort := 8080
   oServer:cDocumentRoot := "./public"

   oServer:OnRequest := { |oReq, oRes| HandleRequest( oReq, oRes ) }
   oServer:OnStart   := { || QOut( "Servidor rodando na porta 8080" ) }
   oServer:OnError   := { |e| QOut( "Erro: " + e:Description ) }

   oServer:Start()

   // Manter a aplicacao rodando
   WAIT "Pressione qualquer tecla para parar..."

   oServer:Stop()

RETURN NIL

FUNCTION HandleRequest( oReq, oRes )

   DO CASE
      CASE oReq:cPath == "/api/hello"
         oRes:cContentType := "application/json"
         oRes:cBody := '{"message": "Ola do HarbourBuilder!"}'

      CASE oReq:cPath == "/api/time"
         oRes:cContentType := "application/json"
         oRes:cBody := '{"time": "' + Time() + '"}'

      OTHERWISE
         oRes:nStatus := 404
         oRes:cBody := "Nao Encontrado"
   ENDCASE

RETURN NIL
9 Controles de Internet

Todos os controles de Internet usam I/O assincrono e orientado a eventos. Operacoes de rede nunca bloqueiam a thread da UI. TLS/SSL e suportado em todas as plataformas usando o repositorio de certificados nativo do sistema.

Nesta Página

TWebView CT_WEBVIEW = 62 TWebServer CT_WEBSERVER = 71 TWebSocket CT_WEBSOCKET = 72 THttpClient CT_HTTPCLIENT = 73 TFtpClient CT_FTPCLIENT = 74 TSmtpClient CT_SMTPCLIENT = 75 TTcpServer CT_TCPSERVER = 76 TTcpClient CT_TCPCLIENT = 77 TUdpSocket CT_UDPSOCKET = 78 Exemplo de Codigo: Servidor Web Simples