Skip Navigation Links



Translate this page now :



»Programação
»Programação.NET
»Banco de Dados
»Webdesign
»Office
» Certificações Microsoft 4
»Treinamentos4
»Programação 4
»Webdesign«
»Office & User Tips«
»Grupos de UsuĆ”rios
»CĆ©lulas AcadĆŖmicas«
intcontpiada : 118
Flanelinha
Você já está cadastrado e participa do grupo de usuários de sua cidade ? Se não, comente o porque.
 
 
FaƧa um pequeno teste com 10 questƵes de VB
.:.
Teste seus conhecimentos em Visual Basic, SQL Server e ASP 3.0 com nossas provas on-line
.:.
Aprimore seus conhecimentos em programaĆ§Ć£o com nosso treinamento on-line de lĆ³gica de programaĆ§Ć£o
.:.
Veja nosso calendƔrio de treinamentos
Gostou da PƔgina?
Então

para um amigo!

Pesquisa personalizada
Pesquisar Dicas:

 






Criando uma aplicação de CHAT com VB


Faça o download do código fonte

Vamos criar uma aplicação de chat com VB e através dela poderemos entender melhor como o Visual Basic manipula conexões de rede.

Para entendermos isso precisamos primeiramente entender a rede. A comunicação em rede pode ser realizada com diferentes protocolos. Um protocolo é um padrão de transferencia de dados, como um padrão de comunicação entre dois computadores. Português e Inglês, por exemplo, poderiam ser entendidos como protocolos. Um brasileiro não consegue falar com um americano, pois ambos usam protocolos diferentes.

Vou basear este artigo no protocolo TPC/IP, o mais utilizado e o padrão da Web. A comunicação em rede é feita através de uma definição de diversas camadas. Ela obedece a um padrão internacional chamado modelo OSI que divide o processo de comunicação em 7 camadas.

Imagine as camadas de comunicação em rede como camadas de software. Quando um usuário digita uma letra no Word, este manipula o Windows para imprimir a letra no vídeo, o Windows por sua vez utiliza a BIOS da máquina para fazer a impressão no vídeo e esta utiliza o hardware diretamente. Ou seja, trabalho em camadas, com cada um fazendo a sua parte do trabalho. O mesmo acontece no trabalho em rede, porém o número de camadas é maior : 7 ao todo no modelo OSI, uma passando dados para a outra até que, enfim, os dados entram no cabo e saem do lado oposto para, novamente, passar pelas 7 camadas, agora em ordem inversa.

Das 7 camadas existentes 2 nos interessam bastante : A camada de aplicação, a de nível mais alto, mais próxima do usuário e a camada de transporte.

A camada de aplicação contém protocolos com funções específicas, direcionados a determinadas tarefas. Por exemplo, o HTTP, o FTP, o SMTP são protocolos contidos na camada de aplicação.

Já a camada de transporte é responsável pela transmissão de dados entre as máquinas. É a camada de transporte que garante que os dados realmente chegaram (ou não) na máquina de destino. Todos os protocolos da camada de aplicação utilizam a camada de transporte para realizarem suas transmissões. Desta forma, quando você quer fazer alguma tarefa específica, como transferência de arquivos, pode usar FTP. Mas quando quer fazer algo diferente para sua aplicação se comunicar via internet através de um formato próprio, então você programa diretamente na camada de transporte para controlar a transmissão dos dados.

A camada de transporte trabalha com 2 protocolos : UDP e TCP. A diferença entre os dois é que o protocolo TCP trabalha com o estabelecimento de conexão com o host destino enquanto que o UDP não. Desta forma o TCP é mais seguro e dá mais garantias em relação a comunicação enquanto que o UDP simplesmente transmite sem garantia de atingir o destino.

No Visual Basic existem 2 componentes ActiveX que nos permitem utilizar essas camadas : O componente INET, que nos permite utilizar a camada de aplicação (HTTP/FTP) e o componente Winsock que nos permite utilizar a camada de transporte (TCP/UDP). Podemos considerar ainda os MAPI controls que permitem o envio de e-mail, mas a conexão deles é com protocolo MAPI, atingindo apenas indiretamente o SMTP.

Para a montagem de uma aplicação de chat utilizaremos a camada de transporte e o protocolo Winsock para fazermos uma conexão direta com a máquina destino.

Outra questão importante para conhecermos é a forma de endereçamento das máquinas. Todos sabem, com certeza, que em uma rede TCP/IP cada máquina possui um endereço IP para identifica-la na rede. Isso é bem simples.

Mas imagine que em uma máquina A existam 5 programas esperando informações pela rede. Uma máquina B faz o envio para o IP da máquina A. Qual dos 5 programas irá receber a informação ?

Com esse exemplo observa-se que o endereço IP não é suficiente para identificar o destino de uma comunicação em rede. É necessário uma identificação do programa que irá recebe-la. Devido a isso na camada de transporte são criadas as portas de comunicação. Todo programa que deseja receber ou transmitir uma informação pela rede precisa então abrir uma porta de comunicação para o seu uso.

As portas de comunicação são numeradas de 1 a 65000. Algumas portas são classicas e já reservadas : o protocolo HTTP usa porta 80, o protocolo FTP usa porta 21, o SMTP usa porta 25, assim por diante. Por isso na hora de abrir uma porta de comunicação deve-se tomar cuidado de não colidir com uma das portas reservadas. Em geral abre-se a porta com um número alto.

Os números de 1 a 65000 são portas de comunicação. Uma porta de comunicação aberta por um aplicativo e pronta para receber uma informação é chamada de um Socket. É interessante observar também que o endereçamento IP e a localização da máquina destino são controlados pelo protocolo IP, na camada de rede do modelo OSI, que fica logo abaixo da camada de transporte. A camada de transporte fica com a tarefa de controlar as portas de comunicação através dos protocolos TCP e UDP. Observe então a origem do nome TCP/IP.

Vamos então iniciar a montagem da aplicação de chat. Precisaremos primeiramente montar uma tela igual a imagem abaixo. Observe que colocamos na tela caixas para a definição da porta de comunicação a ser utilizada, isso irá facilitar os testes permitindo que seja utilizada uma única máquina para testar a aplicação.

Utilizaremos protocolo TCP, demonstrando como estabelecer uma conexão com máquinas remotas.

Iremos primeiramente montar o código do botão "Aguardar conexão". Este botão quando clicado deve abrir um socket na máquina para que a aplicação receba conexões de outra máquina. Na prática você faria isso no form_load ou algo assim, a colocação de tal tarefa em um botão tem apenas fins didáticos.

Veja então o código do botão :

Private Sub CmdAguardar_Click()
Winsock1.LocalPort = txtportalocal.Text
Winsock1.Listen
lblstatus.Caption = "Aguardando conexão"

End Sub

Define-se a porta local que será utilizada para aguardar a conexão e chama-se o método listen do componente Winsock. Por fim atualiza-se um label com o status da aplicação para que o usuário saiba o que está acontecendo.

Vejamos agora o botão para realizar a conexão :

Private Sub CMDConnectar_Click()
Winsock1.LocalPort = txtportalocal.Text
Winsock1.Connect txthost.Text, txtremport.Text

End Sub


Define-se a porta local e chama-se o método conectar indicando o nome do host remoto e a porta remota à qual será feita a conexão.

Quando ocorre um pedido de conexão é chamado o evento ConnectionRequest do objeto WinSock. Precisamos então programar esse evento para aceitar a conexão requisitada. Veja :

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept requestID
End Sub

O close inicialmente fecha sockets/conexões abertas e aceita a que está sendo requisitada. Em uma aplicação mais séria deveríamos usar algum critério para saber se devemos realmente aceitar a conexão ou não (por exemplo, será que já não existe algum usuário conectado?).

Vamos então programar o evento Connect do objeto Winsock apenas para atualizar o label com o status da aplicação :

Private Sub Winsock1_Connect()
lblstatus.Caption = "Conectado"
End Sub


Agora precisamos realizar a transmissão de dados. Vamos fazer isso no Change da textbox de escrita (txtescrever). Veja :


Private Sub txtEscrever_Change()
Winsock1.SendData txtEscrever.Text
End Sub

Bem simples, uma única instrução para fazer o envio através da conexão já aberta. Por fim devemos programar o evento DataArrival do objeto WinSock. Veja :


Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim strData As String
Winsock1.GetData strData, vbString
txtLer.Text = strData
End Sub

Simplesmente lemos a informação do componente Winsock e colocamos na caixa de texto de leitura (txtler).

Para testar essa aplicação compile-a e chame o executável 2 vezes. Você terá duas janelas da aplicação de chat. Preencha a porta local em uma (3000, p.exemplo) e clique em aguardar conexão.

Na outra indique a porta local (3100, p. exemplo), a porta remota (3000, o mesmo que a da outra janela) e o nome da máquina (a sua, claro). Clique em conectar.

O label de status das duas janelas mostrará que você encontra-se conectado. A partir dai tudo que você digitar na textbox superior aparecerá na textbox inferior da outra janela da aplicação.

Se você tiver 2 máquinas, poderá fazer esse teste remotamente.

 

Dennes Torres
MCSD,MCSE,MCDBA





Envie seus comentįrios sobre este artigo

Nome :

E-mail :

Comentários :


Avise-me quando houverem novos comentįrios nesta pįgina

Veja abaixo os comentários já enviados :

Nome : Tharces Morales E-Mail : tharces@uol.com.br
Gostaria q/ vcs me dessem 1 luz sobre a seguinte mensagem:
"Compile error: Method or data member not found".
Obrigado
Nome : julio cezar sardenberg de souza E-Mail : julioc2s@ig.com.br
Muito bom
Nome : Joice E-Mail : joicepinto84@bol.com.br
Gostei do artigo!Mas preciso saber se realmente ele foi testado, e se funciona em uma rede interna sem acesso a internet. Obrigado e parabéns!!!!!!!!!!!!
Nome : Adilson E-Mail : dylprogramador@ibest.com.br
Maravilha essas informações, programo em vb e ministro curso em redes, vb etc.
Nome : gleyton E-Mail : gleytonsilva@brturbo.com.br
Olá tdo bem estava fz os testes de seu aplicativo aki em casa e naum deu certo..

Da um problema nesta linha de comando

Winsock1.Connect txthost.Text, txtremport.Text
Nome : tiago E-Mail : Tiago_mano_2@hotmail.com
Queria k m arranjaxem um chat feito em visual basic
fico agradecido! Por favor tnho urgencia... Obrigada
Nome : marcio E-Mail : moicramsilva@hotmail.com
como ejetar drive de cd com winsock
a seu artigo e otimo
Nome : Helio E-Mail : helio_joaquim@hotmail.com
Muito interessante o seu artigo. Vou experimentá-lo. Pensei em criar algo parecido mesclando ASP e VB. Mas, vou usar essa idéia primeiro.
Nome : Dyeison Carraro E-Mail : dyeison.carraro@gmail.com
Olá, gostei do artigo, eu tava presisando disso. Como eu faço para adicionar o objeto Winsock ao projeto???
Nome : Paulinho E-Mail : p_narre@yahoo.com.br
Gostei, mas como envias p/ pág como .exe?
Nome : TIAGO EDER CUMPRI E-Mail : tcumpri@yahoo.com.br
gostaria de saber qual versão do Visual Basic mais indicado para esta aplicação(chat)
Grato pela atenção
Tiago
08-05-07
Nome : Joca E-Mail : jonax_2006@hotmail.com
Como defino o winsock???

Da-me erro:

"Compile error: Method or data member not found"

Obrigado
Nome : Francisco Melo E-Mail : franciscomelo18@gmail.com
Quando eu coloco em duas maquinas não funciona
Nome : Heitor Pereira E-Mail : hp.sistemas@gmail.com
Muito bom !

Já tinha lido alguns artigos de como fazer isso, mas você conseguiu ser objetivo sem deixar de explicar origem dos fatos.

Obrigado e parabens !
Nome : Maxwell E-Mail : m2x82x8@hotmail.com
Não entedi porque o arguadar conexão????? quando ela vai tar disponivel?
Nome : Matheus E-Mail : matheus.hrn@gmail.com
powwwww, link pra downlaod tá quebrado!
Nome : mkeMgMSjyVIwDNnJPM E-Mail : info@pamevents.de
Um dia antes da previse3o ai sim.Nossa cara, ficou muito bom! Vou csosefnar que eu estava muito nervoso e despreparado, hehehehe.Respondendo melhor a pergunta do Gabriel (Toupeira), eu “realmente ne3o recordava” sobre o porquea a cidade onde moro se chama Cascavel. Tive que relembrar as aulas de historia regional da quarta serie do fundamental, mas vamos le1. Breve introdue7e3o:Como qualquer cidade, Cascavel sf3 deve eaxito como polo regional por causa de fatores estrate9gicos, especialmente em rotas extrativistas nos ciclos da erva mate e da madeira, ate9 hoje e9 rota de “muitas coisas” je1 que fica a 150 km da cidade de Foz do Iguae7u, porem atualmente e9 conhecida pelas faculdades sendo de nominada cidade universite1ria, sim isto aqui esta virado em quitinetes e bares sertanejos.O tal nome:Reza e0 lenda que o nome surgiu de um grupo de colonos que, pernoitando nos arredores de um rio, descobriram um grande ninho de cobras cascave9is, denominando ente3o o local como “Cascavel”. Quando inda era uma vila ela foi oficializada pela prefeitura de Foz do Iguae7u em 1936, je1 com a denominae7e3o de Cascavel, entretanto, o prelado daquela cidade, monsenhor Guilherme Maria Thiletzek, rebatizou-a como Aparecida dos Portos (ne3o sei porque a igreja condena tudo), nome que ne3o vingou entre a populae7e3o.O termo cascavel origina-se de uma variae7e3o do latim cle1ssico “caccabus”, cujo significado e9 borbulhar d e1gua fervendo .Resumindo e9 isso. ^^
Nome : Richardson E-Mail : adm@rwsis.com.br
O chat funciona perfeito em rede local, mas quando testo em duas m?quinas na Internet, o sistema n?o chama o Servidor que est? em uma rede sem fio.
Acho que ele n?o identifica o IP da m?quina na rede, pois o Roteador possui um IP tipo xxx.xxx.1.1 e a m?quima que est? executando o m?dulo "Servido" com o comando "Aguardar conex?o", o IP ? diferente, tipo xxx.xxx.1.6
Como fa?a para o sistema identificar a m?quina na rede sem fio no m?todo "Winsock1.Accept requestID" ?

Grato...
Nome : QTJhbxHna E-Mail : 3jsuc8t9oh@gmail.com
Nice piece of rarn-elbousibg Dan. The problem with your analysis is of course the aspects to the discussion which you so carefully step around because it isn't just "the left" who are marketing borderless Europe is it?

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Conheça mais sobre o nosso site :

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::



Quer saber mais?
Faça um curso na Búfalo Informática, Treinamento e Consultoria e
Prepare-se para o Mercado!
Veja o que a Búfalo tem para você.

ļæ½ BĆŗfalo InformĆ”tica, Treinamento e Consultoria - Rua Ɓlvaro Alvim, 37 Sala 920 - CinelĆ¢ndia - Rio de Janeiro / RJ
Tel.: (21)2262-1368 (21) 9240-5134 (21) 9240-7281 e-Mail:
contato@bufaloinfo.com.br