Hallo liebe Leute, könnt ihr mir sagen wie ich meinem Server sagen kann das er mir eine Liste zurück geben soll, mit denn Namen der Clients die dann in der ListBox des Clients angezeigt werden soll.?
Der Code besteht teilweise aus einem anderen Tutorial von diesem Forum!
Mein Server
Und das mein Client(1textbox, 1 Button, 1ListBox(Wo die Clients gelistet werden solln), 1richttextbox)
Der Code besteht teilweise aus einem anderen Tutorial von diesem Forum!
Mein Server
VB.NET-Quellcode
- Imports System.Net.Sockets
- Imports System.IO
- Imports System.Net
- ' TCP-MultiServer
- ' C 2009 - Vincent Casser
- Module Module1
- Private server As TcpListener
- Private client As New TcpClient
- Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 8087) ' eingestellt ist port 8000. dieser muss ggf. freigegeben sein!
- Private list As New List(Of Connection)
- Private Structure Connection
- Dim stream As NetworkStream
- Dim streamw As StreamWriter
- Dim streamr As StreamReader
- Dim nick As String ' natürlich optional, aber für die identifikation des clients empfehlenswert.
- End Structure
- Private Sub SendToAllClients(ByVal s As String)
- For Each c As Connection In list ' an alle clients weitersenden.
- Try
- c.streamw.WriteLine(s)
- c.streamw.Flush()
- Catch
- End Try
- Next
- End Sub
- Sub Main()
- Console.WriteLine("Der Server läuft!")
- server = New TcpListener(ipendpoint)
- server.Start()
- While True ' wir warten auf eine neue verbindung...
- client = server.AcceptTcpClient
- Dim c As New Connection ' und erstellen für die neue verbindung eine neue connection...
- c.stream = client.GetStream
- c.streamr = New StreamReader(c.stream)
- c.streamw = New StreamWriter(c.stream)
- c.nick = c.streamr.ReadLine ' falls das mit dem nick nicht gewünscht, auch diese zeile entfernen.
- list.Add(c) ' und fügen sie der liste der clients hinzu.
- Console.WriteLine(c.nick & " ist beigetreten.")
- ' falls alle anderen das auch lesen sollen können, an alle clients weiterleiten. siehe SendToAllClients
- Dim t As New Threading.Thread(AddressOf ListenToConnection)
- t.Start(c)
- End While
- End Sub
- Private Sub ListenToConnection(ByVal con As Connection)
- Do
- Try
- Dim tmp As String = con.streamr.ReadLine ' warten, bis etwas empfangen wird...
- If tmp = "/test" Then
- MsgBox("Befehl erfolgreich")
- ElseIf tmp = "/listp" Then
- SendToAllClients(list.Last.ToString)
- End If
- Console.WriteLine(con.nick & ": " & tmp)
- SendToAllClients(con.nick & ": " & tmp) ' an alle clients weitersenden.
- Catch ' die aktuelle überwachte verbindung hat sich wohl verabschiedet.
- Console.WriteLine(con.nick & " has exit.")
- SendToAllClients(con.nick & "hat uns verlassen.")
- list.Remove(con)
- Exit Do
- End Try
- Loop
- End Sub
- End Module
Und das mein Client(1textbox, 1 Button, 1ListBox(Wo die Clients gelistet werden solln), 1richttextbox)
VB.NET-Quellcode
- Imports System.Net.Sockets
- Imports System.IO
- Imports System.Text.RegularExpressions
- Public Class Form1
- Private stream As NetworkStream
- Private streamw As StreamWriter
- Private streamr As StreamReader
- Private client As New TcpClient
- Private t As New Threading.Thread(AddressOf Listen)
- Private Delegate Sub DAddItem(ByVal s As String)
- Private nick As String = "unknown"
- Private Sub AddItem(ByVal s As String)
- rtb_chat.AppendText(String.Format("{0,10}", s) & vbCr)
- End Sub
- Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
- Try
- client.Connect("127.0.0.1", 8087) ' hier die ip des servers eintragen.
- ' da dieser beim testen wohl lokal läuft, hier die loopback-ip 127.0.0.1.
- If client.Connected Then
- stream = client.GetStream
- streamw = New StreamWriter(stream)
- streamr = New StreamReader(stream)
- streamw.WriteLine(nick) ' das ist optional.
- streamw.Flush()
- t.Start()
- Else
- MessageBox.Show("Verbindung zum Server nicht möglich!")
- Application.Exit()
- End If
- Catch ex As Exception
- MessageBox.Show("Verbindung zum Server nicht möglich!")
- Application.Exit()
- End Try
- End Sub
- Private Sub Listen()
- While client.Connected
- Try
- Me.Invoke(New DAddItem(AddressOf AddMessage), streamr.ReadLine)
- 'Me.Invoke(New AddMessage(streamr.ReadLine))
- Catch
- MessageBox.Show("Verbindung zum Server nicht möglich!")
- Application.Exit()
- End Try
- End While
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- nick = My.Settings.benutzername
- End Sub
- Private Sub AddMessage(ByVal msg As String)
- rtb_chat.AppendText(msg & vbCrLf)
- End Sub
- Private Sub btn_sendmessage_Click(sender As Object, e As EventArgs) Handles btn_sendmessage.Click
- streamw.WriteLine(txt_sendmessagebox.Text)
- streamw.Flush()
- txt_sendmessagebox.Clear()
- End Sub