VB .NET – programação multiThread socket – Servidor

Já sabemos que 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 ideia básica por trás da programação multithread com sockets é que sempre que o servidor receber um pedido de ligação de cliente, o servidor criará uma Thread (independente) 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.

O nosso servidor será bem simples iremos criar uma aplicação do tipo Console usando o Visual Basic 2010 Express Edition.

Criando o Servidor Multithread

Abra o Visual Basic 2010 Express Edition e crie um novo projeto do tipo Console Application com o nome ServidorSocket.

No módulo do projeto vamos iniciar definindo os seguintes namespaces:

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

A agora inclua em Main() o seguinte código:

Sub Main()Dim serverSocket As New TcpListener(IPAddress.Parse("127.0.0.1"), 2502)
Dim clientSocket As TcpClient = Nothing
Dim contador As Integer

serverSocket.Start()
msg(“Server Started”)
contador = 0

While (True)
contador += 1
clientSocket = serverSocket.AcceptTcpClient()
msg(“Client No:” + Convert.ToString(contador) + ” inciado!”)
Dim cliente As New handleClinet
cliente.iniciaCliente(clientSocket, Convert.ToString(contador))
End While

clientSocket.Close()
serverSocket.Stop()
msg(“saida”)

Console.ReadLine()
End Sub

Vamos criar uma classe chamada TrataCliente que irá conter os seguintes métodos:

  • iniciaCliente –
  • doChat –

Public Class TrataCliente
Dim SocketCliente As TcpClient
Dim clienteNo As String

Public Sub iniciaCliente(ByVal inSocketCliente As TcpClient, ByVal clineNo As String)
Me.SocketCliente = inSocketCliente
Me.clienteNo = clineNo
Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf doChat)
ctThread.Start()
End Sub

Private Sub doChat()
Dim contadorRequisicao As Integer
Dim bytesFrom(10024) As Byte
Dim dadosDoCliente As String
Dim enviaBytes As [Byte]()
Dim respostaServidor As String
Dim rContador As String
contadorRequisicao = 0

While (True)
Try
contadorRequisicao = contadorRequisicao + 1
Dim networkStream As NetworkStream = SocketCliente.GetStream()
networkStream.Read(bytesFrom, 0, CInt(SocketCliente.ReceiveBufferSize))
dadosDoCliente = Encoding.ASCII.GetString(bytesFrom)
dadosDoCliente = dadosDoCliente.Substring(0, dadosDoCliente.IndexOf(“$”))
msg(“Do cliente-” + clienteNo + dadosDoCliente)
rContador = Convert.ToString(contadorRequisicao)
respostaServidor = “Servidor para o cliente(” + clienteNo + “) ” + rContador
enviaBytes = Encoding.ASCII.GetBytes(respostaServidor)
networkStream.Write(enviaBytes, 0, enviaBytes.Length)
networkStream.Flush()
msg(respostaServidor)
Catch ex As Exception
MsgBox(ex.ToString)
End Try

End While

End Sub
End Class

Vamos definir também a rotina msg que exibe mensagens no console:
Sub msg(ByVal texto As String)
texto.Trim()
Console.WriteLine(" >> " + texto)
End Sub

Agora já podemos testar a nossa aplicação.

Para começar, vamos executar o projeto Servidor que irá abrir a janela console e ser iniciado estando pronto para receber e atender as requisições:

Em seguida abra o projeto Cliente e execute-o:

Neste momento, podemos ver que o cliente é iniciado e abre uma nova thread com o servidor, que está pronto para atendê-lo. Assim, o Programa Servidor e o cliente estão conectados. Se você quiser testar a comunicação, clique no botão – Conectar ao Sevidor – no formulário do cliente, então você pode ver as mudanças no servidor e mensagens na tela do cliente.

Se clicarmos no botão Conectar com o servidor, o cliente enviará uma mensagem para o servidor e receberá uma resposta conforme mostra a figura a seguir:

Se abrirmos outro projeto Cliente e o executarmos, teremos uma nova thread iniciada com o servidor conforme a figura abaixo:

E, dessa forma, sem complicar muito, mostramos como realizar uma comunicação multithread usando sockets.

As nossas aplicações são um esboço do que seria um programa de chat. Para torná-lo um programa mais funcional, basta ajustar o código e incluir algumas funcionalidades.

Aguarde que em breve mostrarei como criar um programa de chat completo e funcional.

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

Deixe um comentário