Hallo Zusammen,
ich hoffe ich bin in der richtigen Sektion.
Ich habe folgendes Problem und dazu auch gleich eine Frage:
Ich bin dabei einen Patcher zu erstellen und habe dazu auch schon
eine Downloadmethode gewählt samt MD5 Hash, doch mir fällt auf,
das bei dieser Methode die Dateien erstens zu langsam runtergeladen
werden und zweitens es manchmal zu abbrüchen kommt und er dann
auch nicht mehr weiterlädt.
Ich habe das Grundlegendste anhand eines Videotutorials abgetippt
und habe von daher leider keine Ahnung wie der ganze Downloadprozess
aufgebaut ist und bin auch Neuling in dem Bereich und verstehe
den abgetippten Code leider nicht, da in dem Video nicht erklärt wurde
was er da jetzt genau macht.
Nun zu meiner Frage:
Welche Methode eignet sich am besten zum runterladen von Dateien
und kann ich meinen derzeitigen Code so umbauen das die
vorhandenen Funktionen davon nicht beeinträchtigt werden?
Wenn ja, wie kann ich das ganze umbauen?
Wäre super wenn mir da jemand bisschen helfen könnte, am besten
über Skype.
Hier mein derzeitiger Sourcecode:
Spoiler anzeigen
ich hoffe ich bin in der richtigen Sektion.
Ich habe folgendes Problem und dazu auch gleich eine Frage:
Ich bin dabei einen Patcher zu erstellen und habe dazu auch schon
eine Downloadmethode gewählt samt MD5 Hash, doch mir fällt auf,
das bei dieser Methode die Dateien erstens zu langsam runtergeladen
werden und zweitens es manchmal zu abbrüchen kommt und er dann
auch nicht mehr weiterlädt.
Ich habe das Grundlegendste anhand eines Videotutorials abgetippt
und habe von daher leider keine Ahnung wie der ganze Downloadprozess
aufgebaut ist und bin auch Neuling in dem Bereich und verstehe
den abgetippten Code leider nicht, da in dem Video nicht erklärt wurde
was er da jetzt genau macht.
Nun zu meiner Frage:
Welche Methode eignet sich am besten zum runterladen von Dateien
und kann ich meinen derzeitigen Code so umbauen das die
vorhandenen Funktionen davon nicht beeinträchtigt werden?
Wenn ja, wie kann ich das ganze umbauen?
Wäre super wenn mir da jemand bisschen helfen könnte, am besten
über Skype.
Hier mein derzeitiger Sourcecode:
VB.NET-Quellcode
- Imports System.IO
- Imports System.Security.Cryptography
- Public Class Form1
- ' @@@@@@@ Deklarationen @@@@@@@ '
- Dim PATCHURL As String = "http://188.138.127.141/client/metin2/" ' URL zum Clienten auf dem Patchserver mit "/" am Ende.
- Dim PATCHLIST As String = "http://188.138.127.141/client/patchlist.xml" ' URL zur patchlist.xml
- Public Const REGI = "http://188.138.127.141" ' Link zur register.php der Website
- Public Const STARTER = "ClientStarter.exe" ' .exe oder .bin mit der der Client startet.
- Public Const CONFI = "config.exe" ' .exe mit dem die config.exe aufgerufen wird.
- Dim AppPath As String = My.Computer.FileSystem.CurrentDirectory
- Dim WithEvents PatchDownloader As New System.Net.WebClient
- Dim WithEvents PatchListDownloader As New System.Net.WebClient
- Dim DLURLS As New List(Of String)
- Dim ANZAHLDLS As Integer = 0
- Dim Busy As Boolean = Nothing
- Dim zeit1 As Integer = System.Environment.TickCount
- ' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ '
- Public Sub Terminate()
- Process.GetCurrentProcess.Kill()
- End Sub
- Public Sub Start()
- If File.Exists(STARTER) Then
- Process.Start(STARTER)
- Terminate()
- End If
- End Sub
- Public Sub Config()
- If File.Exists(CONFI) Then
- Process.Start(CONFI)
- End If
- End Sub
- Public Function MD5FileHash(ByVal sFile As String) As String
- Dim MD5 As New MD5CryptoServiceProvider
- Dim Hash As Byte()
- Dim Result As String = ""
- Dim Tmp As String = ""
- Dim FN As New FileStream(sFile, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
- MD5.ComputeHash(FN)
- FN.Close()
- Hash = MD5.Hash
- For i As Integer = 0 To Hash.Length - 1
- Tmp = Hex(Hash(i))
- If Len(Tmp) = 1 Then Tmp = "0" & Tmp
- Result += Tmp
- Next
- Return Result
- End Function
- #Region "-> Serverstatus"
- Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
- If PB_GSM.Value < 99 Then
- Button1.Enabled = False
- End If
- PictureBox1.Load("http://188.138.127.141/client/images/bg.png")
- PictureBox2.Load("http://188.138.127.141/client/images/muster.png")
- If File.Exists("patchlist.xml") Then File.Delete("patchlist.xml")
- TextBox1.Text = "Starte Patchvorgang..."
- BG_List.RunWorkerAsync()
- ' MySQL Status
- Dim client As New System.Net.Sockets.TcpClient
- Try
- client.Connect("80.241.210.245", 3306)
- Label11.Text = "Online"
- Catch ex As Exception
- Label11.Text = "Offline"
- End Try
- ' Login Status
- Try
- client.Connect("80.241.210.245", 11002)
- Label10.Text = "Online"
- Catch ex As Exception
- Label10.Text = "Offline"
- End Try
- ' World Status
- Try
- client.Connect("80.241.210.245", 13000)
- Label12.Text = "Online"
- Catch ex As Exception
- Label12.Text = "Offline"
- End Try
- ' Channel1 Status
- Try
- client.Connect("80.241.210.245", 13000)
- Label13.Text = "Online"
- Catch ex As Exception
- Label13.Text = "Offline"
- End Try
- ' Channel2 Status
- Try
- client.Connect("80.241.210.245", 13001)
- Label14.Text = "Online"
- Catch ex As Exception
- Label14.Text = "Offline"
- End Try
- ' Channel3 Status
- Try
- client.Connect("80.241.210.245", 13002)
- Label15.Text = "Online"
- Catch ex As Exception
- Label15.Text = "Offline"
- End Try
- ' Channel4 Status
- Try
- client.Connect("80.241.210.245", 13003)
- Label16.Text = "Online"
- Catch ex As Exception
- Label16.Text = "Offline"
- End Try
- End Sub
- #End Region
- #Region "-> Patchlist runterladen und Ordner erstellen"
- Private Sub BG_List_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BG_List.DoWork
- PatchListDownloader.DownloadFileAsync(New Uri(PATCHLIST), AppPath & "\patchlist.xml")
- If Not My.Computer.FileSystem.DirectoryExists("hshield") Then
- MkDir("hshield")
- End If
- If Not My.Computer.FileSystem.DirectoryExists("lib") Then
- MkDir("lib")
- End If
- If Not My.Computer.FileSystem.DirectoryExists("BGM") Then
- MkDir("BGM")
- End If
- If Not My.Computer.FileSystem.DirectoryExists("mark") Then
- MkDir("mark")
- End If
- If Not My.Computer.FileSystem.DirectoryExists("miles") Then
- MkDir("miles")
- End If
- If Not My.Computer.FileSystem.DirectoryExists("pack") Then
- MkDir("pack")
- End If
- If Not My.Computer.FileSystem.DirectoryExists("upload") Then
- MkDir("upload")
- End If
- End Sub
- #End Region
- #Region "-> Funktion zum starten des Patchvorgangs"
- Private Sub PatchListDownloader_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles PatchListDownloader.DownloadFileCompleted
- TextBox1.Text = "Patchlist heruntergeladen. Starte nun das Patchen."
- PB_AktuDatei.Value = 0
- PB_GSM.Value = 0
- BG_Patcher.RunWorkerAsync()
- End Sub
- #End Region
- #Region "-> Patchvorgang"
- Private Sub BG_Patcher_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BG_Patcher.DoWork
- If BG_Patcher.CancellationPending = True Then
- BG_Patcher.CancelAsync()
- End If
- Try
- Dim xDocument As New Xml.XmlDocument
- xDocument.Load(AppPath & "\patchlist.xml")
- TextBox1.Text = "Starte nun das Patchen"
- For Each node As Xml.XmlNode In xDocument.SelectNodes("Dateien/Datei")
- Dim DateiPfad As String = AppPath & "\" & node.Attributes("Dateiname").InnerText
- Dim Checksum As String = node.Attributes("Checksum").InnerText
- Dim Check As Boolean = Nothing
- TextBox1.Text = "Prüfe: " & node.Attributes("Dateiname").InnerText
- If File.Exists(DateiPfad) = False Then
- DLURLS.Add(PATCHURL & node.Attributes("Dateiname").InnerText.Replace("\", "/"))
- Else
- If Checksum = MD5FileHash(DateiPfad) Then
- Check = True
- Else
- DLURLS.Add(PATCHURL & node.Attributes("Dateiname").InnerText.Replace("\", "/"))
- Check = False
- End If
- End If
- Next
- ANZAHLDLS = DLURLS.Count
- PB_GSM.Maximum = ANZAHLDLS
- PB_GSM.Value = 0
- Catch ex As Exception
- End Try
- Do
- Try
- If PatchDownloader.IsBusy = True Then
- Busy = True
- Else
- For Each DownloadDatei In DLURLS
- If IsNothing(DownloadDatei) Then Exit Do
- Do
- If Busy = False Then
- TextBox1.Text = "Patche: " & IO.Path.GetFileName(DownloadDatei)
- Dim SpeicherOrt As String = My.Computer.FileSystem.CurrentDirectory & "\" & DownloadDatei.Replace(PATCHURL, "").Replace("/", "\")
- Dim Uri As New Uri(DownloadDatei)
- If File.Exists(SpeicherOrt) = True Then
- File.Delete(SpeicherOrt)
- End If
- PatchDownloader.DownloadFileAsync(Uri, SpeicherOrt)
- Busy = True
- Exit Do
- End If
- Loop
- Next
- File.Delete(AppPath & "\patchlist.xml")
- TextBox1.Text = "Client ist auf dem neusten Stand. "
- Button1.Enabled = True
- Exit Do
- End If
- Catch ex As Exception
- End Try
- Loop
- End Sub
- #End Region
- Private Sub PatchDownloader_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles PatchDownloader.DownloadFileCompleted
- Busy = False
- If PB_GSM.Value = ANZAHLDLS Then
- Else
- PB_GSM.Value += 1
- End If
- End Sub
- Private Sub PatchDownloader_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles PatchDownloader.DownloadProgressChanged
- PB_AktuDatei.Maximum = e.TotalBytesToReceive
- PB_AktuDatei.Value = e.BytesReceived
- End Sub
- #Region "-> Spiel starten-Button"
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- If PB_GSM.Value = 100 Then
- Button1.Enabled = True
- End If
- Start()
- End Sub
- #End Region
- #Region "-> Einstellungen-Button"
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- Config()
- End Sub
- #End Region
- #Region "-> Beenden-Button"
- Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
- Terminate()
- End Sub
- #End Region
- #Region "-> x-Button"
- Private Sub x_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles x.Click
- Terminate()
- End Sub
- #End Region
- End Class
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kryter“ ()