Multi-Chat (winsock) und Userlist!

Du lädst doch für jeden Client mittels "Load Winsock1(...)" ein neues Steuerelement. Wenn also der Nickname gesendet wird, dann musst du dir merken, an welchen Winsock-Index es gesendet wird. bzw andersrum: Wenn ein neuer Nickname ankommt (also jemand dem Chat beigetreten ist), dann musst du dir den Winsock-Index merken, der für diesen neuen Nicknamen erstellt wird.
Du könntest zum Beispiel den Nicknamen in die Eigenschaft Winsock(Index).Tag schreiben.

Wenn dann ein Nickname gekickt werden soll, dann durchsuchst du alle Winsock-Steuerelemente nach dem Nicknamen und wenn der Nickname gefunden wurde, dann wird bei diesem Winsock die Verbindung getrennt:
Code:
Private Sub KickUser(ByVal Username As String)
    Dim intZähler As Integer
    For intZähler = 1 To Winsock1.Count - 1
        If Winsock1(intZähler).Tag = Username Then
            '-->Verbindung dieses Winsock-Clients beenden:
            Winsock1(intZähler).Close
            'Schleife verlassen:
            Exit For
        End If
    Next
End Sub

'Möglicher Aufruf:
KickUser "Peter"
 
also müsste ich beim connection request oder sonst irgendwo in den code f0olgendes schreiben ?

Code:
dim x as integer
NK(x) = winsock(intmax).index

^^ ?
ich glaub, ich habs falsch verstanden...

wie meinste das denn mit dem tag ?

EDIT:
Code:
Winsock(intMax).Tag = datasplit(1)
ist das gemeint ? datasplit(1) ist der Nickname
 
Zuletzt bearbeitet:
Danke
Hab das jetzt mit dem hinzufügen kicken, zuordnen hinbekommen :D:D:D:D:D
Jetzt müsste ich nur noch wissen wie ich diese Userlist vom server den clienten schicke.... damit auch die wissen wer online is und wer nich
 
Da musst du dann halt wieder ein neues Identifizierungszeichen erfinden:
Code:
Const NickListeZeichen as String = "0003"
const NickTrennzeichen as String = "¶"
Jetzt bastelst du beim Server alle Nicknamen in einen String und verschickst den dann:
Code:
Private Function NickListe() As String

    NickListe = NickListeZeichen
    Dim intZähler As Integer
    'Nickliste basteln:
    For intZähler = 1 To Winsock1.Count - 1
        NickListe = NickListe & Winsock1(intZähler).Tag & NickTrennzeichen
    Next
End Function

'Und jetzt die Nickliste an Client senden:
Winsock1(Index).senddata NickListe

Edit:
Beim Client dann mittels Split Data, NickTrennzeichen die Nachricht auswerten.
 
Also ich hatte jetzt was ausprobiert... funktioniert auch soweit

Server :
Code:
Dim J As Integer
For J = 0 To Userlist.ListCount - 1
        test = test & " " & Userlist.List(J)
Next
DoEvents
Winsock(Index).SendData "LISTE " & test

Client :
Code:
If Left$(data, 6) = "LISTE " Then
Userlist.Clear
Userlist.AddItem Mid(data, 8)
End If

Jetzt würd ich gerne wissen ob das genau so gut ist, oder deine methode wohl doch besser wäre? Dann würde ich das ganze auf deine umstellen...

Komisch ist aber... das wenn der user disconnectet, zwar die liste geleert wird, aber wenn er neu zum server connectet, dann wird er 2 mal hinzugefügt oO
 
Ich würde als Trennzeichen kein Leerzeichen verwenden, denn wenn sich ein User "Hans Peter" nennt, also mit Leerzeichen, dann denken alle anderen Clients es sind zwei neue User da: Hans und Peter!
 
ja wie müsste dein code für den clienten heißen

außerdem hab ich bemerkt.. das wenn der client sich durch den Discoinnect button disconnectet, das der nickname beim server nich gelöscht wird : /
undw enn der sich wieder verbindet dann stehen alle nicks in einer reihe oO
 
Zurück