TCP/IP - Über RDP Dateien vom Server lokal öffnen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Joox.

    TCP/IP - Über RDP Dateien vom Server lokal öffnen

    Hallo zusammen.
    ich möchte Dateien, die auf einem Server sind per Remote Desktop mit einem Doppelklick lokal auf meinen Rechner öffnen. Dabei wird auf der Serverseite eine XML-Datei beschrieben die jeden Benutzer mit der aktuellsten IP registriert, der sich mit der Clientsoftware mit dem Server verbindet. Wenn eine Datei Doppelgeklickt(Windows-Funktion) wird, öffnet sich das 2. Serverprogramm, dass die Datei zum Client transferiert. Nach dem Empfang öffnet der Client die transferierte Datei.

    Problem an der Sache:
    Die Datei wird dabei nur 3 mal von 10 komplett Übertragen. Der Fehler liegt dabei daran, dass das Recieve beim Client zu wenig Zeit hat sich auf die Kommunikation vorzubereiten.

    Server_Transfer Seite:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ServerSocket.Connect(localEP) 'Verbindung zum Client
    2. Dim ACK_Byte(1) As Byte 'ToolStripStatusLabelStatus.Text = "Connection to IP/Port: " & tcpip & "/" & Port & " successed."
    3. Dim Bytes(File.ReadAllBytes(cleanPath(cmdstr)).Length) As Byte 'cleanPath sortiert alle nicht erlaubten Zeichen aus
    4. ServerSocket.Receive(ACK_Byte) 'Hat keinen Unterschied gebracht.
    5. System.Threading.Thread.Sleep(30) 'konstante Verzögerungszeit, damit Recieve auf Clientseite sich vorbereiten kann. (Soll nicht mehr da sein)
    6. Bytes = File.ReadAllBytes(cleanPath(cmdstr)) 'Alle Bytes von der Datei werden geladen
    7. ServerSocket.Send(Bytes)


    Client Seite:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Server.Listen(1)
    2. ClientSocket = Server.Accept()
    3. ' kein Unterschied als ohne, sollte als Bestätigung dienen
    4. Dim SYN_Byte(1) As Byte
    5. SYN_Byte(0) = 1
    6. ClientSocket.Send(SYN_Byte)
    7. 'Dateiübertragung
    8. Dim Bytes(1024 ^ 2 * 10) As Byte
    9. CountReceiveBytes = ClientSocket.Receive(Bytes) 'Datei wird Übertragen und Dateigröße wird bestimmt
    10. Dim DataByte(CountReceiveBytes - 1) As ByteNotifyIcon.BalloonTipText = "You've received " & dataname
    11. NotifyIcon.ShowBalloonTip(300)
    12.  
    13. 'Überträgt alle Datenbytes. in eine andere Variable. ReDim Bytes(CountReceiveBytes) funktioniert nicht...For i As Integer = 0 To CountReceiveBytes - 1
    14. DataByte(i) = Bytes(i)
    15. Next
    16. 'Sobald Ordner nicht erstellt worden ist, erstellt er den temporären Ordner
    17. If Not Directory.Exists(TempPath & "\TransferData\") ThenDirectory.CreateDirectory(TempPath & "\TransferData\")
    18. End If
    19. File.WriteAllBytes(TempPath & "\TransferData\" & dataname, DataByte) ' Schreibt alle Datenbytes in die DateiProcess.Start(TempPath & "\TransferData\" & dataname) ' Öffnet die Datei anschließend



    Hat jemand eine Lösung für das Problem? Meine Vermutung steht ja oben.
    Hat sich erledigt, ich habe die Dateigröße vorher mit em Server_Transfer generiert und an den Client überreicht.

    Vorher hat der Client die größe selber generiert.



    Ich lasse den Thread noch offen, falls ihr eine bessere Lösung habt ;)

    System.InvalidException

    System.InvalidException: Ungültige Konvertierung der Zeichenfolge [...]

    Woran kann das liegen. Alle Datentypen sind richtig konvertiert worden, nach "Option Strict ON".

    Kann das mit den Befehlen:

    File.WriteAllBytes()

    oder

    Process.Start()

    zu tun haben?



    Schonmal danke im vorraus.

    Dateien werdennicht komplett übertragen (Andere Bytes als im Original)

    Also ich melde mich mal wieder ;)

    Das folgende Problem ist: ich habe eine Datei, die wird übertragen wird auch öfte richtig übertragen, aber halt nicht immer. Aber woran kann das liegen? Prüfen die Sockets keine Fehlbytes? Wenn nein wie kann ich das übnerprüfen?



    Ablauf auf Serverseite:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. 'Deklarationen der einzelnen Bytestadien
    2. Dim bytes_Dataname(System.Text.Encoding.Default.GetBytes(cmdPath(cmdPath.Length - 1)).Length) As Byte
    3. Dim ACK_Byte(1) As Byte
    4. Dim Bytes(File.ReadAllBytes(cleanPath(cmdstr)).Length) As ByteDim Byte_Datasize() As Byte = System.Text.Encoding.Default.GetBytes(CStr(Bytes.Length - 1))
    5. 'Initialisierungbytes_Dataname = System.Text.Encoding.Default.GetBytes(cleanPath(cmdPath(cmdPath.Length - 1)))
    6. Bytes = File.ReadAllBytes(cleanPath(cmdstr))
    7. 'Komplette Datenkommunikation zwischen MySC und MySST
    8. Console.WriteLine("Send dataname...")
    9. ServerSocket.Send(bytes_Dataname)
    10. Console.WriteLine("Receive acknowledge...")
    11. ServerSocket.Receive(ACK_Byte)
    12. Console.WriteLine("Send datasize...")
    13. ServerSocket.Send(Byte_Datasize)
    14. Console.WriteLine("Receive acknowledge...")
    15. ServerSocket.Receive(ACK_Byte)
    16. Console.WriteLine("Send data...")
    17. ServerSocket.Send(Bytes)
    18. Console.WriteLine("Receive acknowledge...")
    19. ServerSocket.Receive(ACK_Byte)
    20.  Console.WriteLine("Communication complete!")Console.WriteLine()
    21.  
    22. 'Dim Proof_Bytes(File.) As Byte
    23.  
    24.  Console.WriteLine("Server is closing...")ServerSocket.Shutdown(SocketShutdown.Both)
    25. ServerSocket.Close()


    Clientseitiger Ablauf:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Server.Listen(1)
    2. ClientSocket = Server.Accept()
    3. 'Deklarationen der Übertragenen Bytes und des Übersetzungswerts "Int_Datasize"
    4. Dim Byte_Datasize(1024) As Byte
    5. Dim Int_Datasize As Integer
    6. Dim SYN_Byte(0) As Byte
    7. Dim Bytes_Dataname(1024) As Byte
    8. 'Initialisierung
    9. SYN_Byte(0) = 1
    10.  
    11. 'Generiert die Größe der Dateigrößen-Bytes und empfängt Datengröße
    12. CountReceiveBytes = ClientSocket.Receive(Bytes_Dataname)
    13.  dataname = System.Text.Encoding.Default.GetString(Bytes_Dataname, 0, CInt(CountReceiveBytes))
    14. cleanPath(TempPath & dataname)
    15.  
    16. ClientSocket.Send(SYN_Byte)
    17.  
    18. 'Fehler bei Herrn Festerling
    19. ClientSocket.Receive(Byte_Datasize)Int_Datasize = CInt(System.Text.Encoding.Default.GetString(Byte_Datasize))NotifyIcon.BalloonTipText = "You'll receive " & dataname & "." & vbCrLf & "Size: " & Int_Datasize
    20. NotifyIcon.ShowBalloonTip(1000)
    21.  
    22.  
    23. ' kein Unterschied als ohne, sollte als Bestätigung dienen
    24.  
    25. ClientSocket.Send(SYN_Byte)
    26. 'Dateiübertragung
    27. Dim Bytes_Data(Int_Datasize - 1) As Byte
    28. Dim DataByte(Int_Datasize - 1) As Byte ' Bytes_Data wird in DataByte geladen ´Grund: Unbekannt
    29.  
    30.  
    31.  
    32.  
    33. ClientSocket.Receive(Bytes_Data) 'Datei wird Übertragen und Dateigröße wird bestimmt
    34.  NotifyIcon.BalloonTipText = "You've received " & dataname
    35. NotifyIcon.ShowBalloonTip(1000)
    36.  
    37.  
    38.  
    39.  
    40. 'Sobald Ordner nicht erstellt worden ist, erstellt er den temporären Ordner
    41. If Not Directory.Exists(TempPath & "\TransferData\") ThenDirectory.CreateDirectory(TempPath & "\TransferData\")
    42. End If
    43. If File.Exists(TempPath & "\TransferData\" & dataname) ThenFile.Delete(TempPath & "\TransferData\" & dataname)
    44. End If
    45. File.WriteAllBytes(TempPath & "\TransferData\" & dataname, Bytes_Data) ' Schreibt alle Datenbytes in die Datei
    46.  DataByte = File.ReadAllBytes("C:\Dokumente und Einstellungen\Adrian Jüttner\Desktop\3898421295_14_TCP-IP_Galileo_Computing.pdf")
    47.  
    48. Process.Start(TempPath & "\TransferData\" & dataname) ' Öffnet die Datei anschließend
    49.  
    50.  
    51. ClientSocket.Send(SYN_Byte)