vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 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

Fortgeschrittene Programmierung
Winsock Problem 
Autor: IIIIIChrisIIIII
Datum: 11.12.04 20:49

Hi @ all!

Ich habe mir ein Steuerelement gebastelt, mit dem ich Dateien aus dem Web runterladen kann (über Http). Das funktioniert aber aus mir unerklärlichen Gründen nicht bei allen Dateien/Servern. Das Problem ist, dass ich teilweise Videodateien runterlade, diese dann aber nicht abgespielt werden können. Wenn ich sie manuell von der Seite runterlade, kann ich die Videodatei abspielen (was ein Fehlen des Codecs ausschließt). Wenn ich die Dateien auf Größe vergleiche, fällt mir auf, dass die von meiner OCX - runtergeladenen Datei eine minimal andere Anzahl an Bytes hat, als die lauffähige Datei.
Hier mal ein Fragment meines Codes:

Private Sub WSock_DataArrival(ByVal BytesTotal As Long)
  Dim GotData as String, F As Integer, TimeLeft As Long
 
  WSock.GetData GotData
 
  'Header abfangen?
  If DItem.ServerInfo Is Nothing Then
    Set DItem.ServerInfo = ResponseHeader(GotData)
    If DItem.ServerInfo Is Nothing Then
      WSock_Error 1, "Unbekanntes Headerformat", 0, DItem.Source, "", 0, True
      Exit Sub  'Es wurde kein Header runtergeladen
    End If
 
    DItem.BytesDown = DItem.ServerInfo.BytesDown 'falls resumed wurde
 
    RaiseEvent GotHeader(DItem.ServerInfo) 'Event auslösen
 
    If DItem Is Nothing Then Exit Sub 'Kann vorkommen, wenn innerhalb des 
    ' GotHeader - Ereignisses der Download beendet wurde
    If CancelAttempt Then Exit Sub 'Wegen Serverantwort Versuch abbrechen?
    If GotData = "" Then Exit Sub 'Es wurde nur der Header ausgewertet
  End If
 
 
  DItem.BytesDown = DItem.BytesDown + BytesTotal
 
  'Daten in Datei speichern
  If DItem.Aim = "" Then
    If LCase(DItem.ServerInfo.FileDesc) <> "text" Then
      WSock_Error 1, "No text file", 0, DItem.Source, "", 0, False
      Exit Sub
    End If
    'Daten in String speichern
    DItem.Text = DItem.Text & GotData
  Else
    'Daten auf der Festplatte speichern
    F = FreeFile
    Open DItem.Aim For Binary Lock Read Write As #F
      Put #F, DItem.BytesDown - BytesTotal + 1, GotData
    Close #F
  End If
 
  'Für die DownloadRate
  TimeLeft = (Timer - DItem.ServerInfo.StartTime)
  If TimeLeft = 0 Then TimeLeft = 1
  RaiseEvent Progress(DItem.BytesDown, DItem.ServerInfo.BytesTotal, ( _
    DItem.BytesDown - DItem.ServerInfo.BytesDown) / TimeLeft, BytesTotal)
End Sub
Der Code vor dem Speichern der Daten in eine Datei ist um den Header vom Server auszuwerten. Ich bin mir nicht sicher, aber eine mögliche Fehlerquelle könnte sein, dass die Variable GotData ein String ist. Möglicherweise werden die Daten aber vom Server nicht mit dem ASCII - Format sondern Byteweise gesendent, was dann zu falscher Konvertierung in String führt?! (Hab keinen Plan)
Bin mit meinem Latein leider am Ende. Würde mich echt riesig freuen, wenn mir jemand weiterhelfen könnte.

Gruß,
Chris
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Winsock Problem564IIIIIChrisIIIII11.12.04 20:49
Re: Winsock Problem380IIIIIChrisIIIII11.12.04 21:09

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