Universal Ticket.dll - Variablen ganz easy über's Internet versenden

    • Release
    • Closed Source

    Es gibt 107 Antworten in diesem Thema. Der letzte Beitrag () ist von ClonkAndre.

      Universal Ticket.dll - Variablen ganz easy über's Internet versenden

      File-Transfer notwendig? 106
      1.  
        Ja, muss auf jeden fall noch implementiert werden (73) 69%
      2.  
        Zweitrangig (20) 19%
      3.  
        Eher unnötig. Ich kann ja schließlich auch Bytes über die .dll übertragen (13) 12%
      Name:
      Universal Ticket

      Beschreibung:
      Als Nachfolger der Ticket.dll - Kinderleichte Kommunikation übers Netz kannst du ohne lästige Socketprogrammierung Strings, Integer, Objekte, und was es noch an Daten gibt, über das Internet versenden.
      Es ist kein Vorwissen in der Netzwerkprogrammierung notwendig und ist daher ideal für Einsteiger geeignet.

      Auch Fortgeschrittene haben mit der Univeral Ticket.dll ihre Freude - denn eine soldie Kommunikationsstruktur mit stanardmäßiger Verschlüsselung kann im Handumdrehen eingebaut werden!
      Ideal geeignet für Chat- und Fernsteuerungsprogramme, sowie für Online-Multiplayer!

      Verbesserungen gegenüber Ticket.dll:
      • Deutlich optimierte Performance durch komplette Neuentwicklung
      • Senden von Objekten, auch von selbst geschriebenen Klassen
      • Verschlüsselung mit Diffie-Hellman-Schlüsselaustausch
      • Detailierte Events für Verbindungsstatus, geschlossene Clients, heruntergefahrene Server, usw.
      • Events werden vom GUI-Thread aus ausgelöst und können direkt die GUI verändern
      • Verwendung unter Linux / Raspberry PI möglich

      Tutorial (Verwendung der .dll):



      Youtube Direktlink, falls die Einbettung noch frühstückt.

      Verwendete Programmiersprache(n) und IDE(s):
      Visual Basic .NET / IDE VB 2012

      Systemanforderungen:
      .NET Framework 2.0

      Systemveränderungen:
      Keine

      Download(s):
      Download der .dll incl. Beispielprojekt im Anhang!
      HINWEIS: Zum Öffnen des Projektes bitte die .vbproj-Datei öffnen (nicht die .sln) falls ihr Probleme habt.
      HINWEIS: File-Transfer ist in aktueller Version noch nicht implementiert!

      Und wenn's gefällt: Bedanken klicken! Dann sehen auch andere, dass ihr die .dll nützlich findet :)

      Lizenz/Weitergabe:
      Freeware, mit Namensnennung

      Danksagung:
      Mein Dank gilt vor allem dem VB-Paradise für die erstklassige Unterstützung in allen Fragen.
      Es ist wirklich lobenswert wie viele motivierte und selbstlose Leute hier unterwegs sind! :thumbsup:
      Es ist keineswegs selbstverständlich, dass man sich in seiner Freizeit mit Anfängerfragen anderen herumschlägt - also von Leuten, die man möglicherweise nie im Real Life treffen wird.
      Super Sache! :)

      Nachtrag:
      • Version 1.0.6 hochgeladen (Kleine Verbesserung)
      Dateien

      Variablen über das Internet senden? [VB.NET] Universal Ticket.dll :thumbup:
      Lasse deine Programme selbstständig lernen! [VB.NET] Brain.dll
      :thumbsup:

      Dieser Beitrag wurde bereits 11 mal editiert, zuletzt von „mrwebber“ ()

      Hi, ich bin sehr begeistert über diese hilreiche .dll! Ich habe aber trotzdem mal eine kurze Frage zu dieser: Wieso bekomme ich immer einen Fehler des Typs: System.InvalidOperationException, wenn ich statt einem genauen Passwort z.B. 'asdf', das hier schreibe 'Dim WithEvents uts As New UTicketServer(78, 77, TextBox1.Text, Me)'? Wie kann man das beheben? Danke! :D
      Hi,

      ich schätze, es liegt daran, dass uts schon beim Laden bzw. vor dem Laden des Fensters erstellt wird.
      Zu diesem Zeitpunkt befindet sich in TextBox1.Text noch kein sinnvoller Text.

      Eine kleine Abänderung kann das Problem lösen:
      Im globalen Bereich oben: Anstatt:

      VB.NET-Quellcode

      1. Dim WithEvents uts As New UTicketServer(78, 77, "blalbaPassowrtd3gw3", Me)

      nur eine Referenz:

      VB.NET-Quellcode

      1. Dim WithEvents uts As UTicketServer


      Aus dem Form1_Load das

      VB.NET-Quellcode

      1. uts.start()

      löschen, denn zu diesem Zeitpunkt exisiert das uts-Objekt noch nicht.

      Dann zum Fenster einen neuen "Server starten"-Button hinzufügen, der dann den Server wirklich anlegt und startet:

      VB.NET-Quellcode

      1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      2. Textbox1.Enabled = False
      3. Button1.Enabled = False
      4. uts = New UTicketServer(78, 77, TextBox1.Text, Me)
      5. uts.start()
      6. End Sub


      Es wird nun das Passwort aus dem Textfeld benutzt :)

      Variablen über das Internet senden? [VB.NET] Universal Ticket.dll :thumbup:
      Lasse deine Programme selbstständig lernen! [VB.NET] Brain.dll
      :thumbsup:
      Danke für das Video! Ich überleg mal ob ich das ausprobiere. Allerdings merge ich am Ende zwei Assemlys - außerhalb von Visual Studio. Das kann ich dann in Github nicht so einfach abbilden, oder?

      Variablen über das Internet senden? [VB.NET] Universal Ticket.dll :thumbup:
      Lasse deine Programme selbstständig lernen! [VB.NET] Brain.dll
      :thumbsup:
      Hallöchen,

      hat jemand eine Idee, wie ich einen Login für den Chat mache, der über die Datenbank der Webseite läuft? Den Login Code habe ich ja schon, aber ich habe kein Plan, was ich bei dem Chat Code ändern muss, um den Registrierten Nutzer namen im Chat anzuzeigen.

      Hier der Login Code:

      VB.NET-Quellcode

      1. ​Imports System.Collections.Specialized, System.Net, System.Text, System.Security.Cryptography
      2. Public Class Form1
      3. Dim nv As New NameValueCollection
      4. Dim wc As New WebClient
      5. Private Sub btn_login_Click(sender As System.Object, e As System.EventArgs) Handles btn_login.Click
      6. nv.Clear()
      7. nv.Add("u", log_usr.Text)
      8. nv.Add("pw", MD5StringHash(log_pw.Text))
      9. Dim result() As Byte = wc.UploadValues("http://localhost/login.php", "POST", nv)
      10. Dim resultstring As String = System.Text.Encoding.ASCII.GetString(result)
      11. MessageBox.Show(resultstring)
      12. End Sub
      13. Public Function MD5StringHash(ByVal strString As String) As String
      14. Dim MD5 As New MD5CryptoServiceProvider
      15. Dim Data As Byte()
      16. Dim Result As Byte()
      17. Dim Res As String = ""
      18. Dim Tmp As String = ""
      19. Data = Encoding.ASCII.GetBytes(strString)
      20. Result = MD5.ComputeHash(Data)
      21. For i As Integer = 0 To Result.Length - 1
      22. Tmp = Hex(Result(i))
      23. If Len(Tmp) = 1 Then Tmp = "0" & Tmp
      24. Res += Tmp
      25. Next
      26. Return Res
      27. End Function
      28. End Class


      MfG
      Thorder
      46%
      Hallo Thorder,
      was gibt dir der Webserver denn als Antwort zurück? Ein "True" oder "False", dass der Login okay war? Oder mehr Informationen?

      LG

      PS: Da die Übertragung an PHP unverschlüsselt läuft immer schön vorsichtig sein ;) Schließlich kann einfach jemand deinen MD5-Hash im Netzwerk mitlauschen und den selbst auch senden ;) Es gibt meines Wissens hier im Forum eine .dll, die dir die Parameter an PHP verschlüsselt sendet :)

      EDIT: Kannst du auf dem Datenbankserver Code laufen lassen? Also VB-Code? Dann bräuchte man den Umweg über PHP nicht )
      EDIT2: Hier: Encom - Verschlüsselte Requests zu PHP - Skripts als Anregung für spätere Perfektion

      Variablen über das Internet senden? [VB.NET] Universal Ticket.dll :thumbup:
      Lasse deine Programme selbstständig lernen! [VB.NET] Brain.dll
      :thumbsup:

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mrwebber“ ()

      Dann würde ich dir empfehlen, den Login komplett mit UTicket zu machen!
      Du hast dann einen Master, der die Login-Daten kennt, und bei dem man sich anmelden muss. Und dann hast du die normalen Clienten, die sich beim Master anmelden und dann über den Master Nachrichten schicken könnnen. Vom Prinzip her. Registrieren kann man sich dann natürlicheauch beim Master...

      PS: Ich würde gerne mal ein nähres Konzept vorschlagen, also mit mehr Details und Klassendiagramm. Bin allerdings gerade sehr ausgelastet. Vielleicht hat ja der ein oder andere kreative hier im Forum einen guten Vorschlag? :)

      Variablen über das Internet senden? [VB.NET] Universal Ticket.dll :thumbup:
      Lasse deine Programme selbstständig lernen! [VB.NET] Brain.dll
      :thumbsup:
      Ganz genau! :) Musst schauen, wie man von einer Datenbank einließt. Das ist relativ easy ;)

      EDIT:
      Hier der zweite, praktische Teil:


      Bis es einen weiteren Teil gibt, wird es aller Voraussicht nach etwas länger dauern.
      Das heißt, ihr könnt und sollt gerne selbst ausprobieren! :)

      EDIT 2:
      Ich habe ein Bild angehängt, das prinzipiell zeigt, wie ihr die Ports freigeben müsst, um den Chat über das Internet zu verwenden! ;)
      Bilder
      • Freigabe.png

        29,48 kB, 1.228×738, 392 mal angesehen
      Dateien

      Variablen über das Internet senden? [VB.NET] Universal Ticket.dll :thumbup:
      Lasse deine Programme selbstständig lernen! [VB.NET] Brain.dll
      :thumbsup:

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mrwebber“ ()

      Hab die Library jetzt mal getestet und bin echt positiv davon überrascht. Ist wirklich einfach zu verwenden und läuft auch sehr stabil.

      Einziges Manko, wie ich finde, dass du die EventHandler nicht dem Standard (mal dahergeholt, halt wie die normalen Events das auch haben) folgst. Normalerweise übergibt man dem ja einmal den sender und dann die EventArgs. Für mich selbst hab ich das einfach mal erweitert.

      Interessant wäre für mich persönlich auch eine Serverseitige Schnittstelle für deine Library mit PHP. Denkst du soetwas wäre machbar? So könnte man zwar nur kurz eine Verbindung zum Masterserver aufbauen aber dadurch wäre dann eine Web/PC Anwendung möglich. :)

      €dit: Wozu ist beim Client eigentlich die Referenz auf die zu benutzene Form nötig? In C# kann ich dort sowieso nur eine neue Variable vom Typ Form erstelllen und dann darauf verweisen. ?
      Hi, freut mich, wenn dir die Library gefällt!
      Das mit den Events habe ich so noch gar nicht bedacht ... stimmt.
      Findet sonst noch jemand, dass man das ändern sollte?
      @backtothetoast: Wie hast du das gemappt?

      Wie stellst du dir das mit dem PHP genau vor? Meinst du, dass man bei jeder Web-Anfrage auch einen UTicket-Clienten instanziieren kann?

      Das mit dem Form übergeben liegt daran, dass man ja direkt aus den Events heraus Änderungen an der GUI vornehmen möchte. Ich brauche also eine Referenz, um intern einen Invoke auf den GUI-Thread durchzuführen. ;)

      Variablen über das Internet senden? [VB.NET] Universal Ticket.dll :thumbup:
      Lasse deine Programme selbstständig lernen! [VB.NET] Brain.dll
      :thumbsup:
      Ich hab mir einfach eine neue ClassLibrary erstellt, deine Klasse als Verweis draufgetan und alle Events wie du sie hast übernommen nur mit (sender, eventargs) quasi.

      Genau das meine ich. So könnte man halt über z.b. ein Webformular Daten an den Masterserver senden (bzw. UTicketServer).

      Welche Events? Scheint nämlich keine Probleme zu geben, wenn ich einfach als Referenz ne leere neue Form übergebe.
      @backtothetoast
      Ich gehe mal davon aus, dass er einen weiteren Thread verwendet, weswegen er dann in den Main-Thread invoken muss. Das macht man normalerweise, wenn man das Event feuert.

      @mrwebber
      Anstatt eine Form zu verlangen, würde ich auf ​ISynchronizeInvoke setzen: Man kann es, wenn man will auch selbst implementieren und es nimmt auch Controls, nicht nur Forms. Der Aufruf ist aber fast 1:1 der gleiche wie bei der Form :)