Multiserver (TCP)

    • VB.NET

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

      Kann mir einer von euch Helfen? ich möchte bei dem Client eine kleine "Sende & empfang" funktion hinzufügen, dass man sich untereinander Daten austauschen kann. Ich habe auch schon danach gegoogelt aber dort kam nur etwas wie man es mit Bildern macht und das hat irgendwie nicht Funktioniert...

      PLZ helft mir
      Huhu.

      Sehr schickes Tutorial! Mal ein fettes Dankeschön an Kevin89! :thumbup:

      Also bei mir klappts wunderbar, jedenfalls lokal (andersrum hab' ich es noch nicht getestet).


      Da ich das ganze aber modifizieren will, habe ich jetzt die Idee gehabt eine Benutzerliste hinzufügen.

      VB.NET-Quellcode

      1. list.Add(c) ' und fügen sie der liste der clients hinzu.
      2. Console.WriteLine("-> " & c.nick & " ist beigetreten.")
      3. ' falls alle anderen das auch lesen sollen können, an alle clients weiterleiten.
      4. For Each d As Connection In list ' an alle clients weitersenden.
      5. Try
      6. d.streamw.WriteLine("-> " & c.nick & " ist beigetreten.")
      7. d.streamw.Flush()
      8. Catch
      9. End Try
      10. Next


      So. Das Problem ist aber, dass das "-> " & c.nick & " ist beigetreten." jetzt im Chat steht, bzw. in der ListBox1.

      Kann mir jemand erklären, wie ich den User jetzt bei "KryptonListBox1" hinzufüge?

      Ich bin kein Noob, habe aber bis jetzt noch nicht in diesem "Bereich" gearbeitet.

      Vielen Dank!

      MfG deLaKing
      Hallo!
      Tolles tut aber ich habe ein problem damit. Ich habe einem freund den "server" geschickt. dann hat er ihn gestartet. ich habe dann im client seine ip eingegeben. aber der client kann keine verbindung aufbauen. ich hab´s sowohl mit der externen al der internen ip des freundes versucht...aber es geht nicht.wisst ihr woran daliegen könnte?
      Nein. Skype, Teamviewer, ICQ & Co laufen über einen (bzw. mehrere) globale Multiserver die die Daten nur von Client zu Client "durchleiten". Daher sind keine Freigaben von Ports auf der Seite der Clients nötig.

      Und um so einen Multiserver geht es in diesem Thread. Jede Seite bekommt zur Kommunikation einen Client, sodass die Verbindung so abläuft:



      Du aber hast es jetzt so gemacht:



      Sodass im Prinzip jemand, der die Rolle des Clients nutzen möchte (in diesem Fall dein Freund), den Server betreiben und somit ggf. Portweiterleitung konfiguriert haben muss. Das ist nicht Sinn der Sache, wobei es grundsätzlich mit Portfreigabe natürlich gehen würde. Dann kannst du aber gleich eine einfache Verbindung aufbauen.

      PS: Wer eine kleine Server-App geschrieben hat und keinen Hoster findet, kann mich mal fragen, vllt. hoste ich die Anwendung auf meinem vServer (insofern nicht zu Performance- und Trafficlastig).

      LG
      Ich habe ein Problem. Ich benutze deinen MultiServer Code um Befehle zu versenden. Das klappt auch aber wenn ich eine Form aufrufe hängt sich mein ganzes Programm auf. Hier mein Code:

      VB.NET-Quellcode

      1. Private Sub ListenToConnection(ByVal con As Connection)
      2. Do
      3. Try
      4. Dim tmp As String = con.streamr.ReadLine ' warten, bis etwas empfangen wird...
      5. 'tmp
      6. '' Hier Befehle hinzufügen
      7. If tmp = "LockDesktop" Then
      8. Beispiel.Show
      9. ElseIf tmp = "Shutdown" & My.Settings.Login_Password Then
      10. MsgBox("Shutdown")
      11. End If
      12. Catch ' die aktuelle überwachte verbindung hat sich wohl verabschiedet.
      13. list.Remove(con)
      14. Exit Do
      15. End Try
      16. Loop
      17. End Sub


      Hast du vieleicht eine Lösung ???
      Jetzt hängt er sich nicht mehr auf aber die Form schließt direkt wieder:

      VB.NET-Quellcode

      1. Private Sub DoSomething()
      2. For i As Integer = 0 To 100000
      3. i += 1
      4. If My.Settings.UseLocalPass = True Then
      5. Lock_LocalPass.Show()
      6. ElseIf My.Settings.UseUSB = True Then
      7. Lock_USB.Show()
      8. ElseIf My.Settings.UseBluetooth = True Then
      9. Lock_Bluetooth.Show()
      10. End If
      11. Next
      12. End Sub


      Und hier:

      VB.NET-Quellcode

      1. If tmp = "LockDesktop" Then
      2. d = New Thread(AddressOf DoSomething)
      3. d.Start()
      4. End If


      Und hier:

      VB.NET-Quellcode

      1. Private d As Thread
      2. Private Delegate Sub d_UpdateText(ByVal s As String)


      Hier weiß ich nicht wie ich den Delegate einsetzen soll. Ich möchte nur den Desktop sperren. ABer der schließt direkt wieder
      Wenn du nicht in der Lage bist einen Delegaten zu verwenden dann such doch im Internet, es gibt genug Beispiele... und ein Beispiel hast du von mir bereits bekommen. Die Form schließt sich weil du eben keinen Delegaten verwendest.

      Muss am Ende ungefähr so aussehen:

      VB.NET-Quellcode

      1. Private Delegate Sub d_showSomeFrm()

      VB.NET-Quellcode

      1. Private Sub showSomeFrm()
      2. ieineForm.Show()
      3. End Sub


      Aufruf

      VB.NET-Quellcode

      1. Me.Invoke(New d_showSomeFrm(AddressOf showSomeFrm))
      OK Danke hab es jetzt doch geschafft. Puh wenn man was neues Lernen muss ist das mal ganz schön hart. Aber jetzt weiß ich wies funktioniert. Danke!

      Edit: Oh hab erst jetzt gesehen das du dein Beitrag editiert hast. Danke habs aber dann doch alleine geschafft