Ein Server mehrere Clients

Spezielle Fragen zu Netzwerk-Protokollen, DNS, Socket ...
Antworten
XYGS
Foriker
Beiträge: 10
Registriert: Do 5. Mai 2016, 10:40
Kontaktdaten:

Ein Server mehrere Clients

Beitrag von XYGS » Mi 20. Dez 2017, 23:23

Hallo zusammen,

ich habe im Internet ein kleines Chatprogramm für Gambas gefunden und
etwas erweitert. Mit einem Server und einem Client funktioniert alles wunderbar.

Mit zwei Clients habe ich aber noch ein Problem. Der Server kann von den zwei
Clients beliebig viele Nachrichten korrekt empfangen. Allerdings kann
der Server aus irgend einem Grund nur Nachrichten an den ersten Client senden.
Beim zweiten Client kommt nichts an. Es kommt auch keine Fehlermeldung.
Weiss jemand, was ich falsch gemacht habe? Vielen Dank für eure Hilfe. :)

Hier der Server:

Code: Alles auswählen

Public thisSocket[3] As Socket
Public i As Integer 


Public Sub Button1_Click()
' Verbinden
   ServerSocket1.Listen(3)
 
  If ServerSocket1.Status = Net.Active Then
    Button.Enabled = False
    TextArea1.Text &= "Listening on Port: " & ServerSocket1.Port & gb.CrLf
  End If

End

Public Sub ServerSocket1_Connection(strHostIP As String)

  If ServerSocket1.Status > Net.Inactive Then
    'Message("Dies ist eine Meldung", "ButtonText")
    i = i + 1 
    thisSocket[i] = ServerSocket1.Accept()
    thisSocket[i].Blocking = False
    If thisSocket[i].Status = Net.Connected Then
      TextArea1.Text &= "Connected: " & thisSocket[i].RemoteHost & ":" & thisSocket[i].RemotePort & gb.Lf
    End If
    Write #thisSocket[i], "Mit Server verbunden!" & gb.lf, Len("Mit Server verbunden!") + 1
  Endif
  
End

Public Sub Socket_Read()
 '- empfangen vom den Clients
 Dim strMsg As String
 
 If Last.Status <> Net.Connected Then Return
 Read #Last, strMsg, Lof(Last)
 TextArea1.Text &= "incoming message: " & strMsg & gb.Lf
End

Public Sub Button2_Click()
' senden an die Clients
 Dim j As Integer
 For j = 1 To 2
  Wait 1 
  If thisSocket[j].Status <> Net.Connected Then
   Message("not connected", "achtung") 
   Return
  End If 
  Write #thisSocket[j], TextArea2.Text, Len(TextArea2.Text)
 Next
 TextArea2.Text = ""
End

Public Sub Form_Open()
  ServerSocket1.Port = 12345
  ServerSocket1.Type = Net.Internet
  i = 0
End

Public Sub Form_Close()
    ServerSocket1.close '- ok funktioniert  
End

Public Sub ServerSocket1_Error()
   Message.Error("Unable to bind socket")
End


und hier der Client:

Code: Alles auswählen


Public Sub Button1_Click()

 ' mit dem Sever verbinden
   Socket2.Connect()

  If Socket2.Status > Net.Inactive Then
    Wait 1
    If Socket2.Status = Net.Connected Then
      Write #Socket2, "Hi Mr Server!", Len("Hi Mr Server!")
    Else
      Close #Socket2
      TextArea1.Text &= ("Error: Timeout")
    End If
  End If

End

Public Sub Socket2_Read()

 '- Nachrichten vom Server empfangen
 Dim strMsg As String

  If Socket2.Status = Net.Connected Then
    Read #Socket2, strMsg, Lof(Socket2)
    TextArea1.Text &= "incoming: " & strMsg & gb.Lf
  Endif  
End

Public Sub Button2_Click()

 ' Nachrichten an den Server senden
 Dim H$ As String
 H$ = TextArea2.Text & gb.Lf
 Write #Socket2, H$, Len(H$)
 TextArea1.Text &= H$
 TextArea2.Text = ""
 'Socket2_Read 

End

Public Sub Form_Open()

  Socket2.Host = "127.0.0.1"
  Socket2.Port = "12345"

End

Public Sub form_Close()
  
   If Socket2.Status > Net.Inactive Then
    Close #Socket2
  Endif
  
End


Public Sub ClientSocket_Error()

  Select Case Socket2.Status
    Case Net.CannotCreateSocket
      Message.Error("Unable to create a socket")
    Case Net.HostNotFound
      Message.Error("Host not Found")
    Case Net.ConnectionRefused
      Message.Error("Remote server refused connection")
    Case Net.CannotRead
      Message.Error("Data read error")
    Case Net.CannotWrite
      Message.Error("Data write error")
  End Select

End



Benutzeravatar
gambi
Moderator
Beiträge: 319
Registriert: Mi 8. Mai 2013, 21:46
Kontaktdaten:

Re: Ein Server mehrere Clients

Beitrag von gambi » Do 21. Dez 2017, 20:55

Hallo XYGS,
kannst du die Projekte hoch laden, also nicht nur den Code. Das macht es einfacher, die Projekte zu testen.

Wenn du von Clients sprichst, meinst du tatsächlich zwei Rechner, oder?

gg

XYGS
Foriker
Beiträge: 10
Registriert: Do 5. Mai 2016, 10:40
Kontaktdaten:

Re: Ein Server mehrere Clients

Beitrag von XYGS » Sa 23. Dez 2017, 15:32

Hallo gambi,

ich werde den Server noch etwas verbessern, dann lade ich die zwei Projekte gerne hoch. Allerdings muss ich erst noch herausfinden, wie man das macht. Der Server funktioniert jetzt mit zwei Clients. Das war mein Ziel. Ich habe das zuerst mit einem Computer und dann im Netzwerk getestet. Der Server kann aber noch nicht eine Nachricht an zwei Clients gleichzeitig senden. Vielleicht ist ja ein Client blockiert. Ich wünsche euch allen im Forum schöne Weihnachten.

XYGS

Benutzeravatar
gambi
Moderator
Beiträge: 319
Registriert: Mi 8. Mai 2013, 21:46
Kontaktdaten:

Re: Ein Server mehrere Clients

Beitrag von gambi » Sa 23. Dez 2017, 16:39

Hallo XYGS,

das hochladen ist nicht schwer.
Du erstellst in der IDE erst einmal ein Quellarchiv (Projekt --> Erstellen--> Quellarchiv, oder Strg+Alt+A).

In deinem Beitrag kannst du das Archiv hochladen. Scrolle einfach etwas nach unten. Da findest du die Reiter "Optionen und Dateianhänge".
Gehe auf Dateianhänge und "Dateien hinzufügen".

Ich bin neugierig auf dein Projekt und wünsche ebenfalls schöne Weihnachten :)

gg

XYGS
Foriker
Beiträge: 10
Registriert: Do 5. Mai 2016, 10:40
Kontaktdaten:

Re: Ein Server mehrere Clients

Beitrag von XYGS » Mo 25. Dez 2017, 12:03

Hallo Gambi,

ich weiss nicht warum, aber jetzt kann der Server an alle Clients gleichzeitig senden. Meine zwei Projekte habe ich hochgeladen. Es können zwei Clients miteinander kommunizieren. Der Server kann eine Nachricht an die Clients senden. Was noch fehlt ist der Passwortschutz und eine Verschlüsselung. Ich hätte gern AES-Verschlüsselung. Gibt es da irgend ein Modul, das man in Gambas einfügen kann? Viel Spass beim testen.

XYGS
Dateianhänge
SocketTest2-0.0.104.tar.gz
(14.39 KiB) 73-mal heruntergeladen
SocketTest1-0.0.53.tar.gz
(12.31 KiB) 72-mal heruntergeladen

Honsek
Foriker
Beiträge: 359
Registriert: Do 4. Okt 2007, 17:01
Kontaktdaten:

Re: Ein Server mehrere Clients

Beitrag von Honsek » Mi 27. Dez 2017, 19:33

Hallo XYGS,

hier: http://www.gambas-buch.de/dw/doku.php?i ... 28.2:start steht Einiges zu dem Thema.

Mit freundlichem Gruß

Honsek
www.gambas-buch.de

So sieht das bei mir aus:

chat_server_clients.png
chat_server_clients.png (92.95 KiB) 1984 mal betrachtet
---> Wenn Du eine gute Antwort erwartest, musst Du sehr gut fragen!

XYGS
Foriker
Beiträge: 10
Registriert: Do 5. Mai 2016, 10:40
Kontaktdaten:

Re: Ein Server mehrere Clients

Beitrag von XYGS » Do 28. Dez 2017, 11:14

Hallo Honsek, danke für die Info, das war genau das was ich gesucht hatte. Gambas ist wirklich gut.
Dein Programm ist auch sehr schön :)

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast