SERVIDOR MULTITHREAD

MKING 30/07/2010 09:40:39
#348886
Caros , cá estou eu novamente, a dúvida é a seguinte, estou montando um servidorzinho TCP em vb.net , ele vai aguardar uma requisição, fazer uma consulta no banco e devolver o resultado, o que eu gostaaria de saber é como faço para esse servidor ficar como multithread e poder receber várias conexões ao mesmo tempo.
MKING 30/07/2010 10:32:43
#348894
Se ajudar em alguma coisa, meu servidor vai receber requisições de diversas máquinas diferentes e realizar uma consulta no banco, segue o código abaixo, estou realmente apertado com isso, pois já uma alternativa a outro problema

Imports System.Net.Sockets
Imports System.Text
Imports System.Threading
Imports System.Data.OracleClient


Module Module1

Sub Main()
TCPServidor.Main()
End Sub

Class TCPServidor

Shared Sub Main()

[ô] Precisa estar escutando na porta correta , tem que ser a mesma porta na qual o cliente vai usar
Const numeroPorta As Integer = xxxx

Dim tcpListener As New TcpListener(numeroPorta)
Dim count As Integer
count = 0
While (True)

tcpListener.Start()
Console.WriteLine([Ô]Aguardando uma conexão...[Ô])

Try
[ô]aceita a conexao do cliente e retorna uma inicializacao TcpClient
Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient()

Console.WriteLine([Ô]Conexão aceita.[Ô])
[ô] obtem o stream
Dim networkStream As NetworkStream = tcpClient.GetStream()
[ô] le o stream em um array de bytes
Dim bytes(tcpClient.ReceiveBufferSize) As Byte

networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))

[ô] Retorna os dados recebidos do cliente para o console
Dim clientdata As String = Encoding.ASCII.GetString(bytes)

Console.WriteLine(([Ô]Cliente enviou : [Ô] + clientdata))

[ô]qualquer comunicacao com o cliente remoto usando o TcpClient pode comecar(aqui)
Dim responseString As String
Dim conn As New OracleClient.OracleConnection([Ô]string de conexão[Ô])
Dim cmd As OracleCommand
Dim dr As OracleDataReader
cmd = New OracleCommand([Ô]QUERY[Ô], conn)

Console.WriteLine([Ô]Vou tentar conectar no banco...[Ô])

Try
conn.Open()
Console.WriteLine([Ô]Consegui...[Ô])
dr = cmd.ExecuteReader()
If dr.FieldCount > 0 Then

While dr.Read()
Console.WriteLine(dr(0))
responseString = dr(0).ToString
End While
Else
Console.WriteLine([Ô]Não achei nada...[Ô])
End If
Console.WriteLine([Ô]Fechando conexão com banco...[Ô])
conn.Close()
conn.Dispose()
Catch e As Exception

Console.WriteLine(e.ToString())

End Try

Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString)

networkStream.Write(sendBytes, 0, sendBytes.Length)
Console.WriteLine(([Ô]Mensagem enviada /> : [Ô] + responseString))

Console.WriteLine([Ô]Fechando conexão TCP...[Ô])
[ô]fecha TcpListener e TcpClient.
tcpClient.Close()
tcpListener.Stop()

Console.WriteLine([Ô]Encerrando conexão com O CLIENTE[Ô])

Catch e As Exception

Console.WriteLine(e.ToString())
Console.ReadLine()

End Try
End While
End Sub
End Class


End Module
MKING 30/07/2010 13:09:24
#348916
Outra questão, tem como eu aceitar várias máquinas nessa mesma conexão e realizar as consultas ?
Tópico encerrado , respostas não são mais permitidas