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
Client Seite:
Spoiler anzeigen
Hat jemand eine Lösung für das Problem? Meine Vermutung steht ja oben.
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:
VB.NET-Quellcode
- ServerSocket.Connect(localEP) 'Verbindung zum Client
- Dim ACK_Byte(1) As Byte 'ToolStripStatusLabelStatus.Text = "Connection to IP/Port: " & tcpip & "/" & Port & " successed."
- Dim Bytes(File.ReadAllBytes(cleanPath(cmdstr)).Length) As Byte 'cleanPath sortiert alle nicht erlaubten Zeichen aus
- ServerSocket.Receive(ACK_Byte) 'Hat keinen Unterschied gebracht.
- System.Threading.Thread.Sleep(30) 'konstante Verzögerungszeit, damit Recieve auf Clientseite sich vorbereiten kann. (Soll nicht mehr da sein)
- Bytes = File.ReadAllBytes(cleanPath(cmdstr)) 'Alle Bytes von der Datei werden geladen
- ServerSocket.Send(Bytes)
Client Seite:
VB.NET-Quellcode
- Server.Listen(1)
- ClientSocket = Server.Accept()
- ' kein Unterschied als ohne, sollte als Bestätigung dienen
- Dim SYN_Byte(1) As Byte
- SYN_Byte(0) = 1
- ClientSocket.Send(SYN_Byte)
- 'Dateiübertragung
- Dim Bytes(1024 ^ 2 * 10) As Byte
- CountReceiveBytes = ClientSocket.Receive(Bytes) 'Datei wird Übertragen und Dateigröße wird bestimmt
- Dim DataByte(CountReceiveBytes - 1) As ByteNotifyIcon.BalloonTipText = "You've received " & dataname
- NotifyIcon.ShowBalloonTip(300)
- 'Überträgt alle Datenbytes. in eine andere Variable. ReDim Bytes(CountReceiveBytes) funktioniert nicht...For i As Integer = 0 To CountReceiveBytes - 1
- DataByte(i) = Bytes(i)
- Next
- 'Sobald Ordner nicht erstellt worden ist, erstellt er den temporären Ordner
- If Not Directory.Exists(TempPath & "\TransferData\") ThenDirectory.CreateDirectory(TempPath & "\TransferData\")
- End If
- 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.