SERVIDOR MULTITHREAD
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.
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
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
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