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:
|
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: