vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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

VB.NET - Ein- und Umsteiger
TCP 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!
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
TCP Stream wirft Bytes durcheinander1.854darksban08.09.12 12:40
Re: TCP Stream wirft Bytes durcheinander1.181ModeratorDaveS08.09.12 18:48
Re: TCP Stream wirft Bytes durcheinander1.246darksban08.09.12 20:49
Re: TCP Stream wirft Bytes durcheinander1.177ModeratorDaveS08.09.12 21:22
Re: TCP Stream wirft Bytes durcheinander1.193darksban08.09.12 22:40
Re: TCP Stream wirft Bytes durcheinander1.124ModeratorDaveS09.09.12 10:07

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-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