hallo,
ich hab nach folgendem tut: http://www.vbarchiv.net/archiv/tipp_details.php?pid=1070
folgendes geschireben:
Client
...
Public Sub SendBinary(ByVal sFile As String)
' Größe der einzelnen Datenpakete
Const BlockSize = 1024
' Datei im Binary-Mode öffnen
F = FreeFile
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 winsock
' 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
txtStatusSend.Text = CStr(nFilePos) + " von " + CStr(nFileSize) + " Bytes" & _
"versandt"
' Wichtig!
DoEvents
Loop
End With
' Datei schließen (Sendevorgang beendet)
Close F
End Sub
Private Sub cmdSend_Click()
' Bild-Datei senden
SendBinary "e:\1.JPG"
End Sub SERVER
...
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
' für den Empfangsvorgang
Dim nBytesTotal As Long
Dim nBytesRead As Long
Dim nFile As Integer
Dim sData As String
Dim sTemp As String
Static sFile As String
' Daten holen
winsock.GetData sData, vbString
log.Text = log.Text & vbNewLine & sData
If Left$(sData, 12) = "<begin size=" Then
' Aha... eine neue Datei wird gesendet
MsgBox ("da kommt was")
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 App.Path & "\" & 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
'txtStatusRecieve.Text = CStr(nBytesRead) & " von "
' & CStr(nBytesTotal) & " Bytes empfangen"
' Wenn alle Bytes empfangen wurden, Datei schließen
If nBytesRead = nBytesTotal Then
Close #nFile
End If
End If
End Subund das klappt in sofern das die ersten 1024 byte übertragen werden und dann is schluss. wo liegt der fehler?
mfg güti |