none
Passar de Console para WindowsAplication RRS feed

  • Pergunta

  • Tenho uma source que foi desenvolvida pelo Macoratti para Console, estou alterando ela mais estou travado em uma Public Class, quando se criar uma nova solução já é criado o Public Class Form1 automaticamente, e nessa source tem a Public Class tratarCliente, e não consigo colocá-la dentro da source mesmo usando os 2 End Class seguindo, se eu fizer desse modo a source fica OK mais o Private Sub broadcast e Sub Mensagem ficam inacessíveis para Public Class tratarCliente.

    Imports System.Net
    Imports System.Text
    Imports System.Net.Sockets
    Module Module1
        Dim listaClientes As New Hashtable
        Sub Main()
            Dim enderecoLocal As IPAddress = IPAddress.Parse("192.168.0.10") '127.0.0.1
            Dim serverSocket As New TcpListener(enderecoLocal, 8888)
            Dim clientSocket As TcpClient = Nothing
            Dim contador As Integer
            serverSocket.Start()
            Mensagem("Sistema: Servidor iniciado...")
            contador = 0
            While (True)
                contador += 1
                clientSocket = serverSocket.AcceptTcpClient()
                Dim bytesFrom(10024) As Byte
                Dim dadosDoCliente As String
                Dim networkStream As NetworkStream = clientSocket.GetStream()
                networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
                dadosDoCliente = Encoding.ASCII.GetString(bytesFrom)
                dadosDoCliente = dadosDoCliente.Substring(0, dadosDoCliente.IndexOf("$"))
                listaClientes(dadosDoCliente) = clientSocket
                broadcast(dadosDoCliente + " Bem Vindo", dadosDoCliente, False)
                Mensagem(dadosDoCliente + " Entrou na Sala ")
                Dim cliente As New tratarCliente
                cliente.iniciaCliente(clientSocket, dadosDoCliente, listaClientes)
            End While
            clientSocket.Close()
            serverSocket.Stop()
            Mensagem("Sair")
            Console.ReadLine()
        End Sub
        Sub Mensagem(ByVal texto As String)
            texto.Trim()
            Console.WriteLine(" >> " + texto)
        End Sub
        Private Sub broadcast(ByVal Mensagem As String, ByVal nomeUsuario As String, ByVal flag As Boolean)
            Dim Item As DictionaryEntry
            For Each Item In listaClientes
                Dim broadcastSocket As TcpClient
                broadcastSocket = CType(Item.Value, TcpClient)
                Try
                    Dim broadcastStream As NetworkStream = broadcastSocket.GetStream()
                    Dim broadcastBytes As [Byte]()
                    If flag = True Then
                        broadcastBytes = Encoding.ASCII.GetBytes(nomeUsuario + ": " + Mensagem)
                    Else
                        broadcastBytes = Encoding.ASCII.GetBytes(Mensagem)
                    End If
                    broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length)
                    broadcastStream.Flush()
                Catch ex As Exception
                    MsgBox(ex.Message)
                End Try
            Next
        End Sub
        Public Class tratarCliente
            Dim clientSocket As TcpClient
            Dim clNo As String
            Dim listaClientes As Hashtable
            Public Sub iniciaCliente(ByVal inClientSocket As TcpClient, ByVal clineNo As String, ByVal cList As Hashtable)
                Me.clientSocket = inClientSocket
                Me.clNo = clineNo
                Me.listaClientes = cList
                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 rContador As String
                contadorRequisicao = 0
                While (True)
                    Try
                        contadorRequisicao = contadorRequisicao + 1
                        Dim networkStream As NetworkStream = clientSocket.GetStream()
                        networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
                        dadosDoCliente = System.Text.Encoding.ASCII.GetString(bytesFrom)
                        dadosDoCliente = dadosDoCliente.Substring(0, dadosDoCliente.IndexOf("$"))
                        Mensagem("Cliente - " + clNo + " : " + dadosDoCliente)
                        rContador = Convert.ToString(contadorRequisicao)
                        broadcast(dadosDoCliente, clNo, True)
                    Catch ex As Exception
                        MsgBox(ex.ToString)
                    End Try
                End While
            End Sub
        End Class
    End Module



    • Editado Tiago.SP sábado, 23 de maio de 2015 18:32
    sábado, 23 de maio de 2015 18:31

Respostas

  • Faz assim: 

    1- Insere no projecto uma nova class;

    2- Corta do modulo Module1 o código da class: desde Public Class tratarCliente até End Class;

    3- Cola esse código na nova class substituindo o que lá estiver;

    4- Copia também os imports do inicio do modulo para não aparecer erros na class.

    • Marcado como Resposta Marcos SJ sexta-feira, 26 de fevereiro de 2016 13:37
    sábado, 23 de maio de 2015 19:00

Todas as Respostas

  • Faz assim: 

    1- Insere no projecto uma nova class;

    2- Corta do modulo Module1 o código da class: desde Public Class tratarCliente até End Class;

    3- Cola esse código na nova class substituindo o que lá estiver;

    4- Copia também os imports do inicio do modulo para não aparecer erros na class.

    • Marcado como Resposta Marcos SJ sexta-feira, 26 de fevereiro de 2016 13:37
    sábado, 23 de maio de 2015 19:00
  • Bom dia,

    Por falta de retorno do usuário, esta thread será encerrada.

    Caso seja necessário, por gentileza, abra uma thread nova.

    Atenciosamente


    Marcos SJ

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 26 de fevereiro de 2016 13:37