6

Click here to load reader

Artigo VB.net TCP

Embed Size (px)

DESCRIPTION

More a article about TCP/IP connection with .NET

Citation preview

Page 1: Artigo VB.net TCP

P r e f á c i oO código abaixo é apresentado para que o leitor possa ter acesso às ferramentas e como utiliza-las no seu desenvolvimento. As informações contidas são meramente ilustrativas, ou seja seu conteúdo não é para efeito oficial, mas para que possa ver as funcionalidades da aplicação. Não se preocupe no design pois sim nas funções incluídas.O artigo apresenta como conectar-se em um servidor remoto através de qualquer computador da rede em VB.NET. Também estarei demonstrando o usa das funções que captura a versão do Windows e como obter o IP da máquina. Neste exemplo a console do servidor fica em Wait até que receba o buffer e o IP da aplicação Client, conforme ilustração abaixo. No cliente quando colocado o nome do servidor que irá fazer o acesso é resolvido o nome e retornado o endereço IP.

Page 2: Artigo VB.net TCP

Antes de criarmos a Console Application (Servidor Remoto)crie primeiro a library ServerClass conforme código seguinte

Código da aplicação Remota – Console RemoteInstancie os namespaces abaixo e referencie o objeto ServerClass que será criado por você.Declare e inicialize o objeto TcpChannel com a porta 8085 para que os clients possam conectar, use o

RegisterChannel para registrar o canal. O registerwellknowservicetype é chamado para registrar a library server-Class com o framework, eu uso o nome testeRemoto para que aplicação client possa saber na hora de conectar.

Imports System.Runtime.RemotingImports System.Runtime.Remoting.ChannelsImports System.Runtime.Remoting.Channels.TcpImports ServerClass

Module Module1

Sub Main() Dim chan As TcpChannel = New TcpChannel(8085) ChannelServices.RegisterChannel(chan)

RemotingConfiguration.RegisterWellKnownServiceType(GetType(myRemoteClass), _ "TesteRemoto", WellKnownObjectMode.SingleCall)

Console.WriteLine("Pressione <ENTER> para Sair...") Console.ReadLine()

Page 3: Artigo VB.net TCP

End Sub

End Module

Código da library ServerClass – objeto RemotoCrie uma Class Library Application e dê o nome de ServerClass.vb, após a conclusão do código abaixo, compile o projeto pois será referenciado.A classe myRemoteClass será chamada pelos programas Remote e Client, e contém uma Function setstring onde receberá o buffer e o IP originados do Client e retorna True se o buffer não estiver vazio.

Public Class myRemoteClass Inherits MarshalByRefObject Public Function setString(ByVal sTemp As String, ByVal sIP As String) As Boolean Try Console.WriteLine("O client {0} tem o seguinte texto " & vbCrLf _ & "'{1}' com o tamanho de {2}", sIP, UCase(sTemp), Len(sTemp)) Return (sTemp <> "") Catch Return (False) End Try End FunctionEnd Class

Código da Aplicação Cliente – Form Client‘Instancie os namespaces abaixo, o System.Net será utilizado para o objeto IpAddress e o DNS, já o Environment para o objeto OperationSystem‘A variavel chan é declarada como Tcpchannel e o obj como myremoteclass da library ServerClass para se conectar no server.‘Logo após declaro a variavel Ipclient para receber o IP da máquina onde está instalado o aplicativo Client, usando o Dns ‘Resolve e o método GetHostName.‘A variavel RecOK será usada como flag para uma possivel reconexão‘A função obtVersão é usada para obter a versão do windows conforme figura acima, instalado em um client Windows 98 e ‘2000‘ O evento do botão conectar (button1) inicia com a verificação da variavel RecOK ou seja, caso tenha sido feito a conexão com ‘o servidor é feito um desregsitro no TCPChannel. Logo após mediante a entrada de dados com o nome do server, eu uso o ‘dns resolve para obter o IP do servidor onde está instalado o aplicativo remoto; para o acesso é usado o método Getobject do‘objeto Activator para chamada da library ServerClass. Informo a URI e o nome do computador TESTEREMOTO (declarado na ‘console application). Para o envio do buffer e o IP do client eu uso o SetString e checo o status do envio.

Imports System.Runtime.RemotingImports System.Runtime.Remoting.ChannelsImports System.Runtime.Remoting.Channels.TcpImports ServerClassImports System.NetImports System.Environment

Public Class Form1 Inherits System.Windows.Forms.Form

Private SistemaVersaoOperacional As OperatingSystem Private chan As TcpChannel = New TcpChannel() Private obj As myRemoteClass Private IPClient As IPAddress = Dns.Resolve(Dns.GetHostName).AddressList(0) Private RecOk As Boolean

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Label4.Text = "Versao: " & obtVersao() Button4.Visible = False End Sub Public Function obtVersao() As String

Page 4: Artigo VB.net TCP

SistemaVersaoOperacional = OSVersion With SistemaVersaoOperacional Select Case .Platform Case PlatformID.Win32Windows Select Case (.Version.Minor) Case 0 obtVersao = "Windows 95" Case 10 obtVersao = "Windows 98" Case 90 obtVersao = "Windows ME" End Select Case PlatformID.Win32NT Select Case (.Version.Major) Case 4 obtVersao = "Windows 4.0" Case 5 If .Version.Minor = 0 Then obtVersao = "Windows 2000" Else obtVersao = "Windows XP" End If End Select Case Else obtVersao = "Falha na Captura da versao do Windows" End Select End With End Function

Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If TextBox1.Text.Trim() = "" Then ListBox1.Items.Add("Entre com o nome do Servidor") Exit Sub End If If RecOk Then If MsgBox("Deseja Reconectar no Server " & TextBox1.Text, MsgBoxStyle.Question + MsgBoxStyle.YesNo, Me.Text) = MsgBoxResult.Yes Then ChannelServices.UnregisterChannel(chan) Else Exit Sub End If End If

ChannelServices.RegisterChannel(chan)

Dim EndIP As IPAddress = Dns.Resolve(TextBox1.Text.Trim()).AddressList(0)

Label3.Text = "Conectado no IP: " & EndIP.ToString()

Dim teste As String = "tcp://" & EndIP.ToString() & ":8085/TesteRemoto" Try obj = CType(Activator.GetObject(Type.GetType("ServerClass.myRemoteClass, ServerClass"), teste), ServerClass.myRemoteClass) If obj Is Nothing Then ListBox1.Items.Add("Nao localizou o servidor TesteRemoto ..") Else RecOk = True ListBox1.Items.Add("Servidor Localizado Com Sucesso ...") End If Catch erro As Exception ListBox1.Items.Add(erro.Message) End Try

Page 5: Artigo VB.net TCP

End Sub

Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Try If obj.setString(TextBox2.Text.Trim(), IPClient.ToString()) Then ListBox1.Items.Add("Envio com Sucesso ...") Else ListBox1.Items.Add("Envio com falha ..") End If Catch erro As Exception ListBox1.Items.Add(erro.Message) End Try End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Me.ClientSize = New Size(288, 394) Button3.Visible = False Button4.Visible = True End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Me.ClientSize = New Size(288, 245) Button3.Visible = True Button4.Visible = False End SubEnd Class

‘Os botões acima são usados para expandir a janela de status do programa gerados no listbox

Até logo

Fabrizio [email protected]