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 :

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.

Na segunda parte do artigo irei mostrar a criação do Servidor que irá receber e distribuir as mensagens recebidas.

Pegue a primeira parte do projeto completo aqui: SocketCliente.zip

"Passará o céu e a terra, mas as minhas palavras jamais passarão." (Mateus 24:35)

Referências:


José Carlos Macoratti