|
| |

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 |  |
 Sockets EndReceive Problem | 808 | Christian25 | 26.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 |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevAniGif (VB/VBA) 
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere Infos
|
| |
|
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
|
|