none
Problemas de utilização Sockets no VS 2005 RRS feed

  • Pergunta

  • Boa tarde,

    Estou com um problema na utilização de comunicação via Sockets utilizando o System.Net.Sockets.
    A comunicação em si funciona perfeitamente, porém, quando recebo esse pacote tento gravá-lo em um arquivo o resultado não é satisfatório.
    Por exemplo: se envio a string "TESTE" ela é gravada no arquivo texto seguida de 8192 colunas.
    Para enviar o pacote uso :

    Dim PacoteEnvio() As Byte = Encoding.ASCII.GetBytes(TbEnviar.Text.Trim)
    networkStream.Write(PacoteEnvio, 0, PacoteEnvio.Length)

    Até ai tudo bem, mas quando o pacote é recebito e convertido novamente para string ele fica com tamanho de 8192
    Trecho do código que recebe o pacote:

    Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient()
    Dim networkStream As NetworkStream = tcpClient.GetStream()
    Dim bytes(tcpClient.ReceiveBufferSize) As Byte
    networkStream.Read(bytes, 0, tcpClient.ReceiveBufferSize)
    Dim clientdata As String = Encoding.ASCII.GetString(bytes)
           
    Aparentemente o valor de tcpClient.ReceiveBufferSize é sempre 8192.

    Estou ustilizando o visual studio 2005 e o S.O. é windows XP professional.

    Desde já agradeço,
    Rodrigo Santana.

     

    segunda-feira, 3 de setembro de 2007 19:25

Respostas

  • http://social.msdn.microsoft.com/Profile/pt-BR/?user=Coiracho&referrer=http%3a%2f%2fsocial.msdn.microsoft.com%2fForums%2fpt-BR%2fuser%2fthreads%3fuser%3dRodrigo%20Campos%20Santana&rh=zxt5ECwc8qRoAD6iKnbkUKMKm0Xd8eJm2YHAaae%2bsug%3d&sp=forums

    Olá
    A função networkStream.Read(bytes, 0, tcpClient.ReceiveBufferSize) devolve um inteiro que é o tamanho dos dados que
     recebeu.
    Assim pode definir
    Dim tamanho as integer =
    networkStream.Read(bytes, 0, tcpClient.ReceiveBufferSize)

    depois ao fazer o Encoding.ASCII.GetString(bytes) pode usar:

    Dim clientdata As String = Encoding.ASCII.GetString(bytes , 0,tamanho)

    Apesar do tamanho do array de bytes ser o do
    tcpClient.ReceiveBufferSize, a string clientdata só vai ter os dados que recebeu.


    Att, Rodrigo Santana.
    terça-feira, 7 de julho de 2009 18:12