VB .NET – Programação MultiThread Socket – Cliente

A Programação Socket multithread significa que um servidor multithread pode se comunicar com mais de um cliente ao mesmo tempo usando a comunicação via socket.

A idéia básica por trás da programação multithread com sockets é que sempre que servidor receber um pedido de ligação de um cliente, o servidor criará uma Thread em separado para a solicitação de cada cliente.

Isso significa que para cada cliente, existe uma thread do cliente em separado. Assim, o cliente pode se comunicar de forma independente com sua própria Thread cliente no servidor.

Vamos então criar uma aplicação multithread com sockets. Antes do VB.NET para fazer uma comunicação cliente/servidor usando TCP/IP tínhamos que usar a biblioteca winsock. isto demandava muito código e a utilização de API´s.

O VB.NET fornece um conjunto de classes em System.Net.sockets que torna a nossa vida mais fácil, pois elas fornecem um conjunto de funcionalidades que abstraem muitas tarefas que antes exigiam a criação de código extra.

Antes de entrar na aplicação propriamente dita vamos recordar alguns conceitos básicos.

O que é um socket?

Um socket pode ser entendido como uma porta de um canal de comunicação que permite a um processo executando em um computador enviar/receber mensagens para/de outro processo que pode estar sendo executado no mesmo computador ou num computador remoto.

Os sockets permitem então a comunicação processo a processo da seguinte forma:

  •     comunicação local: processos locais usando sockets locais
  •     comunicação remota: processos remotos usando sockets em rede (TCP/IP)

Criando o Cliente Multithread

Abra o Visual Basic 2010 Express Edition e crie um novo projeto do tipo Windows Forms Applications com o nome ServidorSocket.

O Programa MultiThreaded Cliente é um aplicativo do tipo Windows Forms Application. Aqui, o programa cliente está conectado à porta 2502 do servidor, e no endereço IP “127.0.0.1″, pois no nosso caso o Cliente e o Servidor estão rodando na mesma maquina.

clientSocket.Connect ("127.0.0.1", 2502)

Quando o cliente se conectar ao Servidor, o Servidor cria uma thread separada para a comunicação do cliente. Assim, podemos ligar mais de um cliente para podermos nos comunicar ao mesmo tempo.

Vamos definir o leiaute da aplicação no formulário form1.vb conforme a figura abaixo:

Controles usados no formulário:

  •  Label – Label1
  •  TextBox – txtMensagemCliente
  •  Button – BtnConectar

No código do formulário começamos definindo os namespaces usados no projeto:

  • Imports System.Net.Sockets
  • Imports System.Text

Depois definimos as variáveis que iremos usar:

  • Dim SocketCliente As New System.Net.Sockets.TcpClient()
  • Dim servidorStream As NetworkStream

No evento Click do botão Conectar ao Servidor temos o seguinte código:
Private Sub btnConectar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConectar.Click

Dim servidorStream As NetworkStream = SocketCliente.GetStream()
Dim tamanhoBuffer As Integer
Dim StreamSaida As Byte() = System.Text.Encoding.ASCII.GetBytes(“Mensagem do Cliente$”)

servidorStream.Write(StreamSaida, 0, StreamSaida.Length)
servidorStream.Flush()

Dim StreamEntrada(10024) As Byte

tamanhoBuffer = SocketCliente.ReceiveBufferSize
servidorStream.Read(StreamEntrada, 0, tamanhoBuffer)

Dim dadosRetornados As String = System.Text.Encoding.ASCII.GetString(StreamEntrada)

msg(“Dados do Servidor => : ” + dadosRetornados)

End Sub

No evento Load do formulário form1 digite o código que realiza a conexão com o servidor no IP e portas definidos:

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

msg(“Cliente Iniciado”)
SocketCliente.Connect(“127.0.0.1”, 2502)
Label1.Text = “Programa Cliente Socket – Conectado ao Servidor …”

End Sub

A rotina para enviar mensagens é dada a seguir:

 Sub msg(ByVal texto As String)
txtMensagemCliente.Text = txtMensagemCliente.Text + Environment.NewLine + " >> " + texto
End Sub

E assim, de forma bem simples, criamos uma aplicação multithread usando sockets que irá atuar como cliente.

Fonte: http://imasters.com.br/artigo/21834/visual-basic/vb-net-programacao-multithread-socket-cliente

Deixe um comentário