Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RSS iMasters

[Resolvido] VB .NET - programação multiThread socket - Servidor

Recommended Posts

Este artigo é continuação de VB .NET - Programação MultiThread Socket - Cliente

Já sabemos que a programação Socket multithreadsignifica que um servidor multithread pode se comunicar com maisde um cliente ao mesmo tempo usando a comunicação via socket. A ideia básica por trás daprogramação multithread com sockets é que sempre que o servidorreceber um pedido de ligação de cliente, o servidor criará umaThread (independente) em separado para a solicitação de cadacliente. Isso significa que, para cadacliente, existe uma thread do cliente em separado. Assim, ocliente pode se comunicar de forma independente com sua própriaThread cliente no servidor.

39995.gif

No artigo anterior, criamos um cliente socket multithread queuma thread através da qual podia se comunicar com o servidor. O servidor por sua vez irá atendercada cliente na sua respectiva thread. O nosso servidor será bem simplesiremos criar uma aplicação do tipo Console usando o Visual Basic 2010 Express Edition.

Criandoo Servidor Multithread

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

No módulo do projeto vamos iniciardefinindo 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 TrataClienteque 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 msgque exibe mensagens no console:

 Sub msg(ByVal texto As String)

texto.Trim()

Console.WriteLine(" >> " + texto)

End Sub

Agora já podemos testar anossa aplicação.

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

40000.gif

Em seguida abra o projetoCliente e execute-o:

39999.gif

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

Se clicarmos no botão Conectarcom o servidor, o cliente enviará uma mensagem para oservidor e receberá uma resposta conforme mostra a figura aseguir:

40002.gif

Se abrirmos outro projeto Clientee o executarmos, teremos uma nova thread iniciadacom o servidor conforme a figura abaixo:

39997.gif

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

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

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

Pegue o projeto Servidorcompleto aqui:  ServidorSocket.zip

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.