vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Sockets EndReceive Problem 
Autor: Christian25
Datum: 26.10.07 00:37

Hallo,

ich hoffe mir kann hier einer weiter helfen. Ich habe eine Server und eine Client Anwendung. Die Serveranwendung verarbeitet Daten, speichert diese in einer Klasse, serialisiert diese und schickt sie per TCPIP an den Client. Das Serialisieren und verschicken klappt einwandfrei.

Nur wie kann ich sicherstellen, dass die Clientanwendung die Daten erst dann serialisiert wenn sie komplett angekommen sind? (Datenfragmente)

Ich hab mir jetzt gedacht das die zu schickenden Daten so aussehen. Die ersten 4 Bytes beinhalten die komplette Länge des Objekts. Beim Client werte ich die ersten 4 Bytes aus und weiß dann wie lange der String sein soll.

Nur bekomm ich es zum teufel nicht hin so lange zu warten bis alle Daten da sind. Ich mein die Länge des Objekts lese ich bereits erfolgreich aus auf dem Client. Nur liefert mir die Funktion Sockets.EndReceive oft mehr Bytes zurück als ankommen können. Wie macht man so was normalerweise? Muss doch einfacher gehen????

Hier mal der Versuch beim Client wie ich die Empfangenen Daten auslesen will. Vielleicht hab ich ja hier einen Fehler.

    Private KompletteLaenge As Integer = 0
    Private mEmpfangeneLaenge As Integer = 0
    Private mKomplettesObjektalsByteAktuellePosition As Integer
    Private mReceiveBuffer(1023) As Byte
    Private mKomplettesObjektalsBytes(-1) As Byte
 
    Private Sub BeginReceive(ByVal ar As System.IAsyncResult)
 
        mEmpfangeneLaenge = mClientSocket.EndReceive(ar)
 
        'Anzahl der Bytes holen, die kommen
        If KompletteLaenge = 0 Then 'FirstFrame
            KompletteLaenge = mReceiveBuffer(0)
            KompletteLaenge += CInt(mReceiveBuffer(1)) << 8
            KompletteLaenge += CInt(mReceiveBuffer(2)) << 16
            KompletteLaenge += CInt(mReceiveBuffer(3)) << 24
            ReDim mKomplettesObjektalsBytes(KompletteLaenge - 1)
            Array.Copy(mReceiveBuffer, 4, mKomplettesObjektalsBytes, _
              mKomplettesObjektalsByteAktuellePosition, mEmpfangeneLaenge - 5)
        End If
 
        mKomplettesObjektalsByteAktuellePosition += mEmpfangeneLaenge - 1
        Array.Copy(mReceiveBuffer, 4, mKomplettesObjektalsBytes, _
          mKomplettesObjektalsByteAktuellePosition, mEmpfangeneLaenge - 5)
 
        mClientSocket.BeginReceive(mReceiveBuffer, 0, 1023, _
          Net.Sockets.SocketFlags.None, AddressOf BeginReceive, mClientSocket)
 
        If mKomplettesObjektalsByteAktuellePosition = KompletteLaenge - 1 Then
            KompletteLaenge = 0
            RebuildList()
        End If
 
    End Sub
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Sockets EndReceive Problem807Christian2526.10.07 00:37

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel