Neste artigo voltamos a falar do controle winsock . Lembra dele ? Para clarear um pouco a sua lembrança reveja os links para os artigos do site :
O propósito deste artigo é mostrar mais uma utilização do controle Winsock : vamos criar um servidor Telnet . Você sabe o que é telnet ?
O que é Telnet ?
"Telnet é o recurso da INTERNET que permite estabelecer uma conexão com outro computador da rede. Ele oferece a oportunidade de estar em um sistema computacional e trabalhar em outro, não importando se o sistema está localizado na sala ao lado, em um prédio próximo, na mesma cidade, ou a milhares de quilômetros de distância.
Você acessa um outro computador como se o seu terminal (microcomputador PC, estação de trabalho, etc.) estivesse ligado diretamente àquele computador. A única diferença é que, se este outro computador estiver distante, a resposta aos seus comandos pode ser um pouco mais lenta, ou seja, os caracteres digitados levam um pouco mais de tempo para aparecer na tela (em torno de um segundo ou mais).
Para utilizar o Telnet, em primeiro lugar você deverá saber o nome do computador ou Host que deseja acessar. Normalmente, esta máquina solicitará a identificação do usuário e também uma senha. A identificação do usuário, também chamada de conta, user-id, username, login, serve para que o computador que está sendo acessado identifique se você é um usuário autorizado a utilizá-lo. Já a senha, também chamada de password, prova que é realmente você que está solicitando acesso. Este processo é semelhante ao que você realiza quando utiliza um caixa eletrônico de banco."
Diversas organizações oferecem uma série de serviços públicos que, ou não necessitam de senha, ou a senha é pública.
Vamos a um exemplo: Vamos acessar o banco de dados em csi.carl.org.
Estando no Windows 95/98 clique em - Iniciar - depois em -Executar - e na caixa Executar no prompt - Abrir - digite :
telnet nome_da_máquina_a_ser_acessada ou número IP da máquina a ser acessada
O nome_da_máquina_ai_ser_acessada
pode ser tanto no formato alfanumérico
(csi.carl.org) quanto no formato numérico
(192.54.81.18), também chamado de endereço IP.
(Veja abaixo)
- Voce pode digitar somente - Telnet e estando no aplicativo Telnet , clicar em Conectar - Sistema Remoto e a seguir informe o endereço em : Nome do host: |
Exemplo: telnet
csi.carl.org ou telnet
192.54.81.18. Você vai obter a tela como abaixo:
Se digitar PAC o resultado será o seguinte :
Bom , acho que deu para você ter uma noção sobre telnet. Agora vamos voltar ao artigo.
Como eu estava escrevendo , vou criar um servidor telnet usando Winsock. Vai ser um servidor simples mas com a funcionalidade de se comunicar com o Telnet. Vamos lá...
O servidor Telnet
Nosso servidor Telnet usará o controle Winsock para se comunicar e irá escutar a porta 23 , que é a porta padrão do Telnet ; nesta porta ele irá escutar as requisições dos usuários e enviar as respostas a estas requisições.
Sua funcionalidade será bem simples , resolverá somente os seguintes comandos :
Dir
- obtem lista de diretorios
Exit - efetua logout do servidor
time - obtem a hora do servidor
help - exibe lista de comandos suportada pelo
servidor.
1- Inicie um novo projeto no Visual Basic e no formulário padrão inclua o controle - Microsoft Winsock Control - Veja abaixo o formulário em tempo de desenho. (Alteramos a cor de fundo do formulário para preto.)
2- Na seção - General Declarations - vamos definir as variáveis visíveis em todo o formulário e a API - Sleep - usada para dar uma pausa durante a execução.
Option Explicit 'usada para dar uma pausa no programa Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'variáveis usadas no projeto Dim UsuarioID As String Dim Senha As String Dim IDAceito As Boolean Dim LoginOK As Boolean Dim ComandoUsuario As String |
3- No evento Load do formulário vamos definir a porta que o servidor vai 'escutar' e limpar o conteúdo das variáveis.
Private Sub Form_Load() Winsock1.LocalPort = 23 'define a porta do telnet Winsock1.Listen 'configura o servidor para ouvir uma requisição do cliente UsuarioID = "" Senha = "" ComandoUsuario = "" IDAceito = False LoginOK = False End Sub |
4- No evento - ConnectionRequest - verificamos o estado da conexao , e se houver uma requisição do usuário para efetuar o Logon enviamos a mensagem para que o mesmo informa seu Login.
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) 'Usuario quer se conectar no servidor If Winsock1.State <> sckClosed Then Winsock1.Close Winsock1.Accept requestID 'envia mensagem de aceitacao e pergunta se quer se logar Winsock1.SendData "Informe o seu Login para Servidor Demo: " End Sub |
5- No evento - DataArriVal- é feito todo o serviço de tratamento dos dados que chegam ao servidor.
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim entrada As String Dim MeuNome As String Dim DirList() As String Dim DirPonteiro As Integer Dimindice As Integer 'usuario envia alguma informacao Winsock1.GetData entrada 'recebe a entrada do cliente If LoginOK Then 'verifica se o usuario ja esta logado If Asc(entrada) = 13 Then If ComandoUsuario Like "dir*[\]" Then 'procesa o comando dir Winsock1.SendData vbCrLf ComandoUsuario = Mid$(ComandoUsuario, 4, Len(ComandoUsuario) - 3) DirPonteiro = 1 ComandoUsuario = Trim(ComandoUsuario) 'obtem lista do diretorio atual MeuNome = Dir(ComandoUsuario, vbDirectory) Do While MeuNome <> "" If MeuNome <> "." And MeuNome <> ".." Then If (GetAttr(ComandoUsuario & MeuNome) And vbDirectory) = vbDirectory Then ReDim Preserve DirList(1 To DirPonteiro) DirList(DirPonteiro) = MeuNome DirPonteiro = DirPonteiro + 1 End If ' representa um diretorio. End If MeuNome = Dir ' obtem proxima entrada Loop Forindice = 1 To DirPonteiro - 1 Winsock1.SendData DirList(ii) & vbCrLf Next Winsock1.SendData "Sanjeev>" 'Exibe o prompt > ComandoUsuario = "" ElseIf Trim(ComandoUsuario) Like "exit" Then 'usuario quer terminar a sessao Winsock1_close ComandoUsuario = "" ElseIf Trim(ComandoUsuario) Like "help" Then 'Usuario requisita pelo conjunto de comando suportado pelo servidor Winsock1.SendData vbCrLf & "Lista de comandos suportados pelo servidor Demo" & vbCrLf Winsock1.SendData "Dir --- obtem lista de diretorios." & vbCrLf Winsock1.SendData "exit --- efetua logout do servidor." & vbCrLf Winsock1.SendData "time --- obtem a hora do servidor." & vbCrLf Winsock1.SendData "help --- exibe lista de comandos suportada pelo servidor." & vbCrLf Winsock1.SendData "Demo>" ComandoUsuario = "" ElseIf Trim(ComandoUsuario) Like "time" Then 'envia a hora do servidor Winsock1.SendData vbCrLf & Time & vbCrLf Winsock1.SendData "Demo>" ComandoUsuario = "" Else 'comando invalido ou nao suportado pelo servidor Telnet Winsock1.SendData vbCrLf & "Comando Invalido" & vbCrLf _ & "Para exibir lista de comandos use o comando : help " & vbCrLf ComandoUsuario = "" Winsock1.SendData "Demo>" End If Else Winsock1.SendData entrada ComandoUsuario = ComandoUsuario & entrada End If Else 'Obtem autenticacao do usuario If IDAceito And Asc(entrada) = 13 Then Winsock1.SendData vbCrLf & "Verificando sua informação de login...." & vbCrLf If UsuarioID = "Teste" And Senha = "jcm" Then Sleep (2000) Winsock1.SendData "Benvindo ao servidor telnet Demo!!!" & vbCrLf & "Demo>" LoginOK = True Else IDAceito = False UsuarioID = "" Senha = "" Winsock1.SendData "Informe seu Login : " Exit Sub End If ElseIf Asc(entrada) = 13 Then Winsock1.SendData entrada & vbCrLf & "Informe a Senha:" IDAceito = True Exit Sub ElseIf Not IDAceito Then Winsock1.SendData entrada End If If IDAceito Then Senha = Senha & entrada Else UsuarioID = UsuarioID & entrada End If End If End Sub |
Pronto ! Você acabou de ver o código do nosso servidor que será chamado de - Demo. Vamos ver se funciona ?
Testando o Servidor Telnet
Para realizar a conexão definimos a senha como : Teste e a senha como : jcm.
Vamos realizar o teste na máquina local , se funcionar na máquina local funcionará também em máquinas remotas. Rode o projeto , você não vai ver nada de mais ; somente a tela como abaixo: (poderiamos minimizar a execução do projeto)
Estando no Windows 95/98 clique em - Iniciar - depois em -Executar - e na caixa Executar no prompt - Abrir - digite : Telnet 127.0.0.1.( 127.0.0.1 é o número IP da sua máquina local.)
O servidor vai 'escutar' a requisição e irá responder conforme a tela abaixo:
Você deverá informar o Login : Teste e a Senha: jcm . Nosso servidor irá verificar se a informação esta correta e irá responder :
Agora você pode testar os demais comandos suportados pelo nosso servidor : dir , help , time e exit. (Veja abaixo. )
Você verá que funciona , ou seja , o seu programa VB que esta rodando em segundo plano , e utiliza o controle winsock , recebe e envia requisições na porta 23 . O cliente usado neste artigo é o próprio programa Telnet. Gostou ???
Até a próxima ...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: