TCPCoreLib

    • Release
    • Closed Source

    Es gibt 48 Antworten in diesem Thema. Der letzte Beitrag () ist von xd-franky-5.

      Name des Programms:
      TCPCoreLib bY Frank

      Beschreibung:
      Da man ständig Fragen sehen muss, wie z.b. "wie geht das" und "versteh ich nicht" bezüglich TCP, wollte ich, dass diese Fragen in Zukunft redundant werden, indem ich eine Lib für einen Multiserver und Client schreibe. Da dies meine erste Lib ist, ist sie höchst wahrscheinlich nicht die aller beste, aber ich habe sie auch hier veröffentlicht, damit ihr Fehler und Wünsche äußern könnt. Als ich kurz vor der Fertigung der Lib stand, sah ich die EasyTCP Lib und habe erst einmal dazu tendiert meine doch nicht zu veröffentlichen aber als ich mir die Kommentare darunter ansah, musste ich feststellen, dass diese Lib nicht mehr für 2010 und höher kompatibel ist und weit weniger Funktionen als meine Lib hat. Aber nun zurück zu meiner Lib. Ich werde nun nicht einfach die Funktionen aufzählen, sondern es in einem Tutorial dazu erklären:

      Tutorial:
      Spoiler anzeigen

      Server:

      Zuerst muss man einen Verweis hinzufügen. Das macht man unter "Projekt" -> "Verweis hinzufügen" und dann auf Durchsuchen und nach meiner TCPCoreLib bY Frank suchen und hinzufügen.
      Dann bei der Form über "Public Class", das:

      VB.NET-Quellcode

      1. Imports TCPCoreLib_bY_Frank 'TCPCoreLib bY Frank importieren


      Nun müssen wir noch den Server deklarieren, um mit ihm arbeiten zu können.

      VB.NET-Quellcode

      1. WithEvents Server As New TCPCoreLib_bY_Frank.Server 'Server deklarieren


      Nun gibt es verschiedene Methoden:

      VB.NET-Quellcode

      1. Server.Start(Integer.Parse(TextBox1.Text), TextBox2.Text) 'Server starten (Port, Nutzername)


      VB.NET-Quellcode

      1. Server.Stopp() 'Server stoppen (Alle Clienten werden disconnected)


      VB.NET-Quellcode

      1. Server.Kick(TextBox3.Text) 'Client kicken (Nutzername)


      VB.NET-Quellcode

      1. Server.KickAll() 'Alle Clienten kicken


      VB.NET-Quellcode

      1. Server.GetClients 'Um alle Clienten zu bekommen


      VB.NET-Quellcode

      1. Server.SendMessage(TextBox5.Text) 'Nachricht als Server senden (Text)


      VB.NET-Quellcode

      1. Server.SendFile(TextBox7.Text) 'Datei als Server senden (Pfad)


      VB.NET-Quellcode

      1. Server.SaveFile(TextBox8.Text) 'Datei speichern (Pfad)


      Und auch verschiedene Events:

      VB.NET-Quellcode

      1. Public Sub Server_ClientConnected(Nutzername As String) Handles Server.ClientConnected 'Wenn ein Client connected (Es wird auch der Nutzername des Clienten zurückgegeben)


      VB.NET-Quellcode

      1. Public Sub Server_ClientDisconnected(Nutzername As String) Handles Server.ClientDisconnected 'Wenn ein Client disconnected (Es wird auch der Nutzername des Clienten zurückgegeben)


      VB.NET-Quellcode

      1. Public Sub Server_GetMessages(Text As String, Nutzername As String) Handles Server.GetMessages 'Wenn eine Nachricht ankommt (Es wird auch der Nutzername des Clienten und der Text zurückgegeben)


      VB.NET-Quellcode

      1. Public Sub Server_MaxClientsExceeded(Nutzername As String) Handles Server.MaxClientExceeded 'Wenn die maximale Anzahl an Clienten überschritten wird


      VB.NET-Quellcode

      1. Public Sub Server_GetFiles(Dateiname As String, Nutzername As String) Handles Server.GetFiles 'Wenn eine Datei ankommt (Es wird auch der Nutzername des Clienten und der Dateiname zurückgegeben)


      Und verschiedene Eigenschaften:

      VB.NET-Quellcode

      1. Server.MaxClients = CInt(TextBox6.Text) 'Maximale Anzahl an Clienten angeben. (10 ist Standard)
      2. 'Kann natürlich auch mit z.b. TextBox.Text = Server.MaxClients, wiedergegeben werden


      Client:

      Zuerst muss man auch wieder einen Verweis hinzufügen. Das macht man unter "Projekt" -> "Verweis hinzufügen" und dann auf Durchsuchen und nach meiner TCPCoreLib bY Frank suchen und hinzufügen.
      Dann bei der Form über "Public Class", das:

      VB.NET-Quellcode

      1. Imports TCPCoreLib_bY_Frank 'TCPCoreLib bY Frank importieren


      Nun müssen wir noch den Server deklarieren, um mit ihm arbeiten zu können.

      VB.NET-Quellcode

      1. WithEvents Client As New TCPCoreLib_bY_Frank.Client 'Client deklarieren


      Nun gibt es auch wieder verschiedene Methoden:

      VB.NET-Quellcode

      1. Client.Connect(TextBox1.Text, CInt(TextBox2.Text), TextBox3.Text) 'Zu Server connecten (IP, Port, Nutzetrname)


      VB.NET-Quellcode

      1. Client.Disconnect() 'Vom Server disconnecten


      VB.NET-Quellcode

      1. Client.SendMessage(TextBox5.Text) 'Nachricht wird gesendet (Text)


      VB.NET-Quellcode

      1. Server.SendFile(TextBox9.Text) 'Datei wird vom angegebenen Pfad gesendet


      VB.NET-Quellcode

      1. Client.SaveFile("C:\Users" & Environment.UserName & "\Desktop" & Dateiname) 'Datei wird auf dem angegebenem Pfad gespeichert


      Und verschiedene Events:

      VB.NET-Quellcode

      1. Public Sub Client_GetMessages(Text As String, Nutzername As String) 'Wenn eine Nachricht ankommt (Es wird auch der Nutzername und Text des Clienten oder Server zurückgegeben)


      VB.NET-Quellcode

      1. Public Sub Client_GetFiles(Dateiname As String, Nutzername As String) Handles Client.GetFiles 'Wenn eine Datei ankommt (Es wird auch der Nutzername des Clienten und der Dateiname zurückgegeben)


      Und verschiedene Eigenschaften:

      -



      Screenshot(s):



      Verwendete Programmiersprache und IDE:
      Visual Basic .NET

      Systemanforderungen:
      z.B. .NET Framework 4.5 (Ja ich schau noch ob ich's runter bekomm')

      Download:
      Im Anhang :)

      Lizenz/Weitergabe:
      Freeware

      Hoffe auf Konstruktive Kritik und Fragen sind auch erwünscht :)
      Dateien

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „xd-franky-5“ ()

      Hi @xd-franky-5:
      sowas ist zum Üben richtig klasse.
      Füge doch bitte noch den Methoden und Variablen eine Beschreibung hinzu.
      (Einfach eine Zeile über der Methode ''' schreiben)

      Anstatt die IP-Adresse in einem String darzustellen könnte man die IPAdress-Klasse in System.Net benutzen.
      Dim ip As System.Net.IPAddress = New System.Net.IPAddress({127, 0, 0, 1})

      Im Beispiel ist mir noch etwas aufgefallen. Schau dir das hier mal an [VB.NET] Konvertieren - wie funktionierts richtig
      Nutze am besten nicht CInt(), sondern Integer.Parse()

      Dann noch etwas ganz pingeliges. Bei einigen Methoden hast du die Parameter z.B "MsgText" oder so genannt. Ich finde es sauberer + schöner wenn man einfach message As String oder so schreibt.

      Für das Stopp-Problem kannst du das hier mal probieren.

      VB.NET-Quellcode

      1. Public Sub [Stop]()
      2. MessageBox.Show("")
      3. End Sub
      Da war @nikeee13: schneller :)
      Ansonsten sieht es gut aus :)
      ist ja ganz einfach datenpfad eingeben

      Sender Client: file als bytes auslesen - >bytes Convertieren zu base64 -> senden
      Entfänger: String entfangen -> String Convertieren zu Bytes -> Bytes als Datei Speichern.

      Grüße Andy
      Dateien als Base64 zu verschicken macht keinen wirklichen Sinn, wenn man komplett binär arbeiten kann. Das ist unnötiger Overhead. Ich würde lieber alles mit einem GZipStream wrappen und dann noch traffic sparen. ;)
      Von meinem iPhone gesendet

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

      @LaMiy
      Bei den Beschreibungen bin ich grade dabei, die sind aber dann auch auf Englisch.
      Und Sollte ich bei GetMsg auch GetMessages machen oder ?

      @thefiloe
      Jetzt ist so ziemlich alles auf Englisch, danke

      @nikeee13
      Wie geht das ? Gibt es vllt. ein Tutorial dazu ?

      EDIT:\\ Das mit der Beschreibung der Methoden will nicht so ganz :/

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xd-franky-5“ ()

      @xd-franky-5
      liest der Server die Daten asynchron ein oder mit Threads ?
      MFG 0x426c61636b4e6574776f726b426974
      InOffical VB-Paradise IRC-Server
      webchat.freenode.net/
      Channel : ##vbparadise
      Warum wenn ich fragen darf ? :)
      Es ist um einiges besser wenn du das ganze asynchrone laufen lässt.
      Da jeder Client bei dir, einen Thread verbraucht wird der Server nach einer weile sehr langsam das kann bei 20 Clients schon anfangen :) .
      Daher mein Tipp mach es Asynchron :)
      MFG 0x426c61636b4e6574776f726b426974
      InOffical VB-Paradise IRC-Server
      webchat.freenode.net/
      Channel : ##vbparadise
      Warum immer 'bY'? Nur weil du das mal falsch geschrieben hast, sieht es trotzdem nicht gut aus.
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: