Salve a tutti,
ho creato un server socket con annesso client. Ho notato che quando il client invia una stringa di testo al server il server riceve byte per byte ( anche se il client invia la stringa intera ) posto di seguito il codice:

Public Sub OnDataReceived(ByVal asyn As IAsyncResult)
Try

Dim content As String = String.Empty

Dim clientPacket As ClientSocketPacket = DirectCast(asyn.AsyncState, ClientSocketPacket)
'end receive...

Dim bytesRead As Integer = clientPacket.clientSocket.EndReceive(asyn)

If (bytesRead > 0) Then

Dim receivedString As String = Encoding.ASCII.GetString(clientPacket.dataBuffer, 0, bytesRead)
clientPacket.receivedTextSB.Append(receivedString)

clientPacket.clientSocket.BeginReceive(clientPacke t.dataBuffer, 0, clientPacket.dataBuffer.Length, 0, New AsyncCallback(AddressOf OnDataReceived), clientPacket)
If (clientPacket.clientSocket.Available = 0 And receivedString = ">") Then

Dim strContent As String
strContent = clientPacket.receivedTextSB.ToString()
strContent = strContent.Substring(0, strContent.Length - 1)
clientPacket.receivedTextSB = New StringBuilder()

'Log(strContent);

'Send data to all clients
SendData(strContent)

End If
Else
Console.WriteLine("Ricevuto 0 bytes")
End If


Catch es As System.Net.Sockets.SocketException

If (es.ErrorCode <> 64) Then

Console.WriteLine(String.Format("ReadCallback Socket Exception: {0}, {1}.", es.ErrorCode, es.ToString()))
End If

Catch e As Exception

If (e.GetType().FullName <> "System.ObjectDisposedException") Then
Console.WriteLine(String.Format("ReadCallback Exception: {0}.", e.ToString()))
End If
End Try
End Sub

La classe ClientSocketPacket è cosi definita:

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Net.Sockets
Namespace ServerSocket
Public Class ClientSocketPacket
Public clientSocket As Socket
Public dataBuffer As Byte() = New Byte(0) {}
Public receivedTextSB As StringBuilder = New StringBuilder()
Public id As Guid = New Guid
End Class
End Namespace


come potete notare per determinare la fine della stringa cerco il carattere ">" ma lo trovo un metodo poco elegante e rischioso oltre che forse nemmeno tanto esatto!

Come posso fare per capire quando la stringa è terminata?

Grazie!