Winsock datei versenden

  • VB

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Winsock datei versenden

    So ich schreib an einem Prog damit man übers netzwerk mit dem headset chatten kann und auch das man über text chatten kann. Nur Wie kann man vernüftig dateien über winsock austauschen?

    Empfangsroutine
    ---Quelltext---

    Dim sData As String
    Dim sTemp As String
    Static sFile As String
    Client1.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 = "Send.wav"

    ' 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
    Else
    If Client2.State = "7" Then Client2.SendData sData
    If Client1.State = "7" Then Client1.SendData sData
    Text1.Text = Text1.Text + vbCrLf + sData
    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
    nFile = 0
    End If
    Else

    End If

    ---Quelltext---

    Sende rountine

    ---Quelltext---
    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 = 10240

    ' 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 Form1.Winsock1
    ' 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
    Form1.txtStatusRecieve.Text = CStr(nFilePos) + " von " + CStr(nFileSize) + " Bytes versandt"

    ' Wichtig!
    DoEvents
    Loop
    End With

    ' Datei schließen (Sendevorgang beendet)
    Close #F
    ---Quelltext---
  • Guck mal bei Planetsource.com, da gibts meistens sehr gut programmierte Programme...

    Was du generell machen solltest bei Datei-Transfer:

    1. Dateilänge übertragen
    2. Datei in Pakete packen
    3. Empfang des Paketes bestätigen lassen