hey,
da ich einen datenversand von winsock suchte bin ich auf diesen beitrag hier gestoßen:
http://www.vbarchiv.net/archiv/tipp_1070.html
so, habe mir gleich abgekritztelt und gaaanz wenig verändert (glaub dateinamen oda so)
so, ich bin am verzweifeln. kein fehler, kein garnichts. jedoch: beim absendeformular gehn alle Bytes raus (kann ich ja per label kontrollieren), jedoch beim empfängerform kommen nur 1024 an oO. danach is die datei (mit 1024 bytes) auf meiner festplatte vorhanden.
hab schon alle variablen gecheckt, is niergenst ein fehler. ich kapier das ech nicht mehr...
hier einmal der absendeform code:Private Sub Command2_Click()
Dim F As Integer
Dim sBuffer As String
Dim nFileSize As Long
Dim nFilePos As Long
Dim nBytesToRead As Long
' Größe der einzelnen Datenpakete
Const BlockSize = 1024
' Datei im Binary-Mode öffnen
F = FreeFile
sFile = "C:\\test.mp3"
Open sFile For Binary As #F
' Dateiname extrahieren
If InStr(sFile, "\") > 0 Then
sFile = Mid$(sFile, InStrRev(sFile, "\") + 1)
End If
' Dateigröße
nFileSize = LOF(F)
' Sendevorgang starten
With ws
' Empfänger mitteln, welche Datei und wieviele
' Daten gesendet werden
.SendData "<begin size=" & CStr(nFileSize) & ";" & sFile & ">"
' Datei blockweise senden
Do While nFilePos < nFileSize
nBytesToRead = BlockSize
If nFilePos + nBytesToRead > nFileSize Then
nBytesToRead = nFileSize - nFilePos
End If
' Datenblock lesen
sBuffer = Space$(nBytesToRead)
Get #F, , sBuffer
' Datenblock senden
.SendData sBuffer
' Fortschritt aktualisieren
nFilePos = nFilePos + nBytesToRead
status.Caption = CStr(nFilePos) + " von " + CStr(nFileSize) + " Bytes" & _
"versandt"
' Wichtig!
DoEvents
Loop
End With
' Datei schließen (Sendevorgang beendet)
Close #F
End Sub empfängerform code:
Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim sData As String
Dim sTemp As String
Static sFile As String
' Daten holen
ws.GetData sData, vbString
If Left$(sData, 12) = "<begin size=" Then
' Aha... eine neue Datei wird gesendet
sData = Mid$(sData, 13)
sTemp = Left$(sData, InStr(sData, ">") - 1)
sData = Mid$(sData, InStr(sData, ">") + 1)
' Dateigröße und Dateiname ermitteln
If InStr(sTemp, ";") > 0 Then
nBytesTotal = Val(Left$(sTemp, InStr(sTemp, ";") - 1))
sFile = Mid$(sTemp, InStr(sTemp, ";") + 1)
Else
nBytesTotal = Val(sTemp)
End If
' Falls kein Dateiname angegeben wurde,
' Daten unter "temp.dat" speichern
If Len(sFile) = 0 Then sFile = "temp.dat"
' ggf. Datei löschen, falls bereits existiert
On Error Resume Next
Kill App.Path & "\" & sFile
On Error GoTo 0
' Datei im Binary-Mode öffnen
nFile = FreeFile
Open "D:\\" & sFile For Binary As #nFile
' bisher gelesene Bytes zurücksetzen
nBytesRead = 0
End If
If Len(sData) > 0 And nFile > 0 Then
' bisher empfangene Daten...
nBytesRead = nBytesRead + Len(sData)
' Daten in Datei speichern
Put #nFile, , sData
' evtl. Fortschritt anzeigen
Label1.Caption = CStr(nBytesRead) & " von " & CStr(nBytesTotal) & " Bytes" & _
"empfangen"
' Wenn alle Bytes empfangen wurden, Datei schließen
If nBytesRead = nBytesTotal Then
MsgBox "fertig"
Close #nFile
nFile = 0
End If
End If
End Sub für jene die schreiben: "ja, vl funktioniert dein winsock modul nicht": doch, tut es einwandfrei, is nicht das erste mal das ich damit arbeite ;)
ich denke es is irgendein furz-fehler, da der code ja auch nicht von mir, vl kann mir ja jemand helfen.
dankeschön =)
lg
da.lohse |