| |
VB.NET - Ein- und UmsteigerTCP Stream wirft Bytes durcheinander | | | Autor: darksban | Datum: 08.09.12 12:40 |
| Hallo,
ich versuche ein Bild via TCP - Protokoll im lokalen Netzwerk zu verschicken. Der Server befindet sich auf einem Handy und ist in Java geschrieben. Der Client auf einem PC und ist in VB geschrieben. Ich benutze einen Thread um die Daten aus dem Stream zu lesen und in einen Bytearray zu kopieren.
Seltsamerweise geraten die Bytes, die aus dem Stream gelesen werden irgendwann durcheinander. D.h., dass plötzlich z.B. 90 (oder auch mehr) Bytes nicht mehr am Anfang des Pakets stehen, sondern irgendwo mittendrin. Es gehen also keine Bytes verloren.
Noch seltsamer ist die Unregelmäßigkeit, mit der dies auftritt. Ich habe hier kein erkennbares Muster finden können. Meistens tritt dies irgendwann zwischen dem 60.000. und 80.000. Byte zum ersten mal auf. Danach synchronisieren sich die Bytes irgendwann wieder bis es erneut auftritt. Wenn ich die Paketgröße mittels Client.ReceiveBufferSize auf 1 setze wird das Bild korrekt in Empfang genommen.
Der Thread, in dem ich die Daten in Empfang nehme sieht folgendermaßen aus:
Dim Client As New Net.Sockets.TcpClient
'...
Private Sub ReceiverThread()
Dim requestCount As Integer
Dim i As Long
Dim read As Integer
Dim networkStream As NetworkStream = Client.GetStream()
Client.ReceiveBufferSize = 1024
Dim bytesFrom(Client.ReceiveBufferSize - 1) As Byte
Dim file(2688000) As Byte
While (True)
Try
Do
i = networkStream.Read(bytesFrom, 0, CInt( _
Client.ReceiveBufferSize))
read += i
If i > 0 Then
Buffer.BlockCopy(bytesFrom, 0, file, read, _
bytesFrom.Length, bytesFrom.Length)
End If
Loop While i > 0
Application.DoEvents()
If i = 0 And read > 0 Then
Me.Invoke(New WriteTextDelegate(AddressOf WriteText), file, _
"Write received file to filestream"))
Exit While
end if
Catch ex As Exception
MsgBox(ex.Message)
Exit While
End Try
End While
End Sub Kann mir jemand sagen, warum hier Pakete durcheinandergeraten, wenn mehr als ein Byte in Empfang genommen wird?
Vielen Dank! | |
| 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 |
|
|
Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2024 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
|
|