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