none
SOCKET X REDE RRS feed

  • Pergunta

  • Ola,

    Estou usando um codigo da internet para criar um servidor mult-clientes.

    Esta feliz,pq aparentemente tudo funcionava perfeitamente.

    Porem quando comecei a testar grandes quantidades de dados, comecei a verificar que as pessoas comecavam a ficarem cortadas.

    Aparentemente como as mensagens sao grandes e o volume muito alto, a rede comecou a particionar as mensagens, e no codigo que tenho nao tem nenhum tratamento para isos, ou seja, a mensagem fica cortada etc...

    Alguem pode me ajudar, informando ou postando algo para tratar e ir montando a mensagem?

    obrigado


    Reginaldo Alves

    sábado, 24 de março de 2012 03:00

Todas as Respostas

  • Olá Reginaldo,

    Já ví esse problema antes, quando você tem um volume grande de dados trafegando via Socket, eles são enviados pela rede em pacotes, você precisara implementar um código para agrupar os dados.

    Uma questão, quando você implementar isso verá que está recebendo pacotes de todos os clientes, neste ponto você deverá selecionar o pacote correto para cada cliente para evitar que um dados que seria destinado a um determinado cliente chegue eu outro.

    Se você puder de alguma forma postar parte dos códigos podemos analisar junto.

    Abraços!


    Roberto Borges http://www.robertoborges.com.br

    sexta-feira, 13 de abril de 2012 15:00
  • Ola, estou usando um codigo do macoratti com algumas mudancas segue: REsumindo, e nesta parate de codigo que a mensagem e recebida.

    Private Sub mLer_Socket()

            Dim aContador_Requisicao As Integer = 0
            Dim aBytes_From(10024) As Byte
            Dim aDado_do_Cliente As String
            Dim aSend_Bytes As [Byte]() = Nothing


            While (True)
                Try


                    '---

                    Dim networkStream As NetworkStream = OBJ_CLIENTE_SOCKET.GetStream()

                    '---

                    networkStream.Read(aBytes_From, 0, CInt(OBJ_CLIENTE_SOCKET.ReceiveBufferSize))

                    '---

                    aDado_do_Cliente = System.Text.Encoding.ASCII.GetString(aBytes_From)
                    aDado_do_Cliente = aDado_do_Cliente.Substring(0, aDado_do_Cliente.IndexOf("</ALERTA>"))

     

                Catch ex As Exception


                    Exit While

                End Try


            End While

        End Sub


    Reginaldo Alves

    sexta-feira, 13 de abril de 2012 15:10
  • Reginaldo,

    Basicamente você precisa acionar o comando Read mais de uma vez

    networkStream.Read(aBytes_From, 0, CInt(OBJ_CLIENTE_SOCKET.ReceiveBufferSize))

    Ele irá receber o total de bytes de 0 até CInt(OBJ_CLIENTE_SOCKET.ReceiveBufferSize)), na próxima leitura, você deverá ler de CInt(OBJ_CLIENTE_SOCKET.ReceiveBufferSize)) até o próximo CInt(OBJ_CLIENTE_SOCKET.ReceiveBufferSize)).

    Você terá que fazer alguns testes para pegar o valor correto, mas esse é o caminho.

    Roberto Borges http://www.robertoborges.com.br

    sexta-feira, 13 de abril de 2012 21:55