Hi,
Hab mich schon lange mit etwas herumgeplagt und nie was gescheites dazu gefunden ausser hier bei euch.
Mit der Anleitung aus dem Workshop hab ich es jetzt probiert.
Bis zum connecten komm ich, aber zum uploaden nicht.
Glaube das es nur ein kleiner Fehler ist.
Also mein Fehler:
Wenn ich eine Datei uploaden will, kommt eine Fehlermeldung die wie folgt aussieht:
Laufzeitfehler '2467':
In dem von Ihnen eingegebenen Ausdruck wird auf ein Objekt verwiesen, das
geschlossen ist oder nicht existiert.
Und jetzt erstmal die Zeilen der UploadFile Function über der gelben Markierung
Friend Function UploadFile(ByVal LocalFile As String, _
ByVal ServerFile As String, _
Optional ByVal StartUploadAt As Long = 0)
Dim TmpPort As Long
Dim TmpPortStr As String
Dim SendBuff As String
' Servermodus auf Binär stellen
If SendCommand(OvermitBinary, CommandOk, CommandOk, _
CommandFail) = False Then Exit Function
NewUniquePort:
' Port öffnen (für das Senden der Daten)
TmpPort = 0
' Neuen Port ermitteln
Call GetNewPort(TmpPort, TmpPortStr)
' Neuen Port öffnen
With Downsock
.Close
.LocalPort = TmpPort
.Listen
End With
' neu geöffneten Port dem Server mitteilen
If SendCommand(SetPort & TmpPortStr, CommandOk, CommandOk, _
CommandFail, 0&, "Neuer Port geöffnet") = False Then
Exit Function
End If
' Upload-Startposition setzen
SendCommand ResumeTransfere & StartUploadAt, _
ResumingSupportet, CommandOk, CommandNotImplemented
' Progressbar einstellen
' siehe Workshop-Projekt
' lokale Datei öffnen
FFile = FreeFile
Open LocalFile For Binary As FFile
Seek #FFile, StartUploadAt + 1
' Anfrage an Server senden
TAbort = False
TotalBytes = LOF(FFile)
OvermittedBytes = StartUploadAt
If SendCommand(Upload & ServerFile, TransferStart, _
TransferStart, PermissionDenied) = False Then
' Zugriff verweigert (auf der Server-Seite)
' ...
Exit Function
End If
' Warten bis die Datenleitung verbunden ist
Dim TimeOut As Long
TimeOut = GetTickCount + 1000 * ConnectTimeOut
Do
DoEvents So und jetzt die Zeilen die in Visual Basic in der UploadFile Function gelb markiert sind:
Loop Until Downsock.State = sckConnected Or _
TimeOut < GetTickCount / 1000 Und jetzt die Zeilen der UploadFile Function unter der gelben Markierung:
' TimeOut überschritten!
If Downsock.State <> sckConnected Then Exit Function
' Alle Daten senden und warten bis die Daten den
' Server erreichen
PacketSend = True
Do
DoEvents
' Wenn vorheriges Päckchen beim Server ist,
' neues Daten-Päckchen senden
If PacketSend = True And _
OvermittedBytes <> TotalBytes Then
' Puffergröße festlegen
If TotalBytes - OvermittedBytes < SendBufferLenght Then
SendBuff = Space(TotalBytes - OvermittedBytes)
Else
SendBuff = Space(SendBufferLenght)
End If
' Übertragene Bytes aufaddieren
OvermittedBytes = OvermittedBytes + Len(SendBuff)
' Progressbar aktualisieren
' ShowProgress picProgress, OvermittedBytes, 0, TotalBytes
' Daten aus der Datei lesen
Get #FFile, , SendBuff
' Daten an den Server schicken
If TAbort = True Then Exit Do
PacketSend = False
Downsock.SendData SendBuff
End If
Loop Until TotalBytes = OvermittedBytes And PacketSend = True
' Socket schließen
Downsock.Close
SendCommand "", TransferComplete, TransferComplete, -1&
' Für den nächsten Down-/Upload zurücksetzen
OvermittedBytes = 0
TotalBytes = 0
' Datei schließen
If FFile <> -1 Then
Close FFile
FFile = -1
End If
' Falls abgebrochen wurde
If TAbort = True Then
'...
End If
' Falls die Verbindung zur Datenleitung nicht
' aufgebaut werden konnte, nochmals versuchen
If LastServerCmd = DataConnectionError Then GoTo NewUniquePort
End Function Vielleicht weiß jemand was ich machen könnte das dies funktioniert.
Bin um jede Hilfe dankbar
Mfg Patrick Hennig |