Hallo alle zusammen.
Ich habe leider ein kleines Problem.
Ich hab nach dieser Anleitung [VB.NET] Multiserver (TCP) einen Multiserver und verschiedene Clients programmiert.
Das Grundsystem läuft. Also Server usw. das Problem was ich habe ist, dass er wenn zwei Leute on sind, den ersten "bevorzugt". Also egal von welchem Client man Text sendet, er kommt immer mit der Angabe, er wäre vom ersten gesendet, an.
Das ist mein Programm mit auftretendem Fehler: (Links wird Hallo gesendet aber er behauptet es wäre von rechts gesendet worden)
Das ist mein Sourcecode:
Server:
Client:
Befehle gehen dann vom zweiten User im übrigen garnicht mehr.
Bin über jede Hilfe dankbar.
Ich habe leider ein kleines Problem.
Ich hab nach dieser Anleitung [VB.NET] Multiserver (TCP) einen Multiserver und verschiedene Clients programmiert.
Das Grundsystem läuft. Also Server usw. das Problem was ich habe ist, dass er wenn zwei Leute on sind, den ersten "bevorzugt". Also egal von welchem Client man Text sendet, er kommt immer mit der Angabe, er wäre vom ersten gesendet, an.
Das ist mein Programm mit auftretendem Fehler: (Links wird Hallo gesendet aber er behauptet es wäre von rechts gesendet worden)
Das ist mein Sourcecode:
Server:
VB.NET-Quellcode
- Imports System.Net.Sockets
- Imports System.IO
- Imports System.Net
- Module Module1
- Private server As TcpListener
- Private client As New TcpClient
- Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 8000)
- 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
- End Structure
- Private Sub SendToAllClients(ByVal s As String)
- For Each c As Connection In list
- Try
- c.streamw.WriteLine(s)
- c.streamw.Flush()
- Catch
- End Try
- Next
- End Sub
- Sub Main()
- Console.WriteLine("Server is running")
- server = New TcpListener(ipendpoint)
- server.Start()
- While True
- client = server.AcceptTcpClient
- Dim c As New Connection
- c.stream = client.GetStream
- c.streamr = New StreamReader(c.stream)
- c.streamw = New StreamWriter(c.stream)
- c.nick = c.streamr.ReadLine
- list.Add(c)
- Console.WriteLine(c.nick & " has joined.")
- SendToAllClients(c.nick & " ist dem Chat beigetreten.")
- 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
- Dim kickUser As String = tmp.Replace("/kick ", "")
- For Each con In list
- If con.nick = kickUser Then
- con.streamw.Write("Du wurdest gekickt.")
- con.streamw.Flush()
- list.Remove(con)
- End If
- Next
- Dim muteUser As String = tmp.Replace("/mute ", "")
- For Each con In list
- If con.nick = muteUser Then
- con.streamw.Write("Du wurdest gemutet.")
- con.streamw.Flush()
- list.Remove(con)
- End If
- Next
- Dim bcast As String = tmp.Replace("/bcast ", "")
- If tmp = "/closeall" Then
- SendToAllClients("/close")
- End If
- If tmp.StartsWith("/bcast") Then
- Console.WriteLine("[SERVER] Broadcast: " & bcast)
- SendToAllClients("[SERVER] Broadcast: " & bcast)
- ElseIf tmp = "/clsall" Then
- SendToAllClients("/cls")
- Else
- Console.WriteLine(con.nick & ": " & tmp)
- SendToAllClients(con.nick & " um " & TimeOfDay & ": " & tmp)
- End If
- Catch
- list.Remove(con)
- Console.WriteLine(con.nick & " has left.")
- SendToAllClients(con.nick & " hat den Chat verlassen.")
- Exit Do
- End Try
- Loop
- End Sub
- End Module
Client:
VB.NET-Quellcode
- Imports System.Net.Sockets
- Imports System.IO
- Public Class Form1
- Dim ip As String
- 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 = "[ADMIN] radio-ffk"
- Private Sub AddItem(ByVal s As String)
- If s.Contains("[ADMIN] radio-ffk") Then
- RichTextBox1.SelectionColor = Color.Green
- RichTextBox1.AppendText(s & vbNewLine)
- ElseIf s.Contains("[CO-ADMIN] Tiippexx") Then
- RichTextBox1.SelectionColor = Color.LimeGreen
- RichTextBox1.AppendText(s & vbNewLine)
- ElseIf s.Contains("[SERVER] Broadcast") Then
- RichTextBox1.SelectionColor = Color.RoyalBlue
- RichTextBox1.AppendText(s & vbNewLine)
- Else
- RichTextBox1.SelectionColor = Color.Black
- RichTextBox1.AppendText(s & vbNewLine)
- End If
- If s = "/close" Then
- Application.Exit()
- End If
- If s = "/cls" Then
- RichTextBox1.Text = ""
- RichTextBox1.SelectionColor = Color.RoyalBlue
- RichTextBox1.AppendText("[SERVER] Der Chat wurde geleert" & vbNewLine)
- End If
- RichTextBox1.SelectionColor = Color.Black
- End Sub
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
- ip = InputBox("IP?", "")
- End Sub
- Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
- Try
- client.Connect(ip, 8000) ' 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)
- streamw.Flush()
- t.Start()
- Else
- Application.Exit()
- End If
- Catch ex As Exception
- Application.Exit()
- End Try
- End Sub
- Private Sub Listen()
- While client.Connected
- Try
- Me.Invoke(New DAddItem(AddressOf AddItem), streamr.ReadLine)
- Catch
- Application.Exit()
- End Try
- End While
- End Sub
- Private Sub MetroButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MetroButton1.Click
- streamw.WriteLine(TextBox1.Text)
- streamw.Flush()
- TextBox1.Clear()
- End Sub
- Private Sub MetroButton2_Click(sender As Object, e As EventArgs) Handles MetroButton2.Click
- streamw.WriteLine("/kick " & TextBox2.Text)
- streamw.Flush()
- TextBox2.Clear()
- End Sub
- Private Sub MetroButton3_Click(sender As Object, e As EventArgs) Handles MetroButton3.Click
- streamw.WriteLine("/mute " & TextBox3.Text)
- streamw.Flush()
- TextBox3.Clear()
- End Sub
- Private Sub MetroButton4_Click(sender As Object, e As EventArgs) Handles MetroButton4.Click
- streamw.WriteLine("/bcast " & TextBox4.Text)
- streamw.Flush()
- TextBox4.Clear()
- End Sub
- Private Sub MetroButton5_Click(sender As Object, e As EventArgs) Handles MetroButton5.Click
- streamw.WriteLine("/closeall")
- streamw.Flush()
- End Sub
- Private Sub MetroButton6_Click(sender As Object, e As EventArgs) Handles MetroButton6.Click
- streamw.WriteLine("/clsall")
- streamw.Flush()
- End Sub
- Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
- If TextBox2.Text = "" Then
- MetroButton2.Enabled = False
- Else
- MetroButton2.Enabled = True
- End If
- If TextBox3.Text = "" Then
- MetroButton3.Enabled = False
- Else
- MetroButton3.Enabled = True
- End If
- If TextBox4.Text = "" Then
- MetroButton4.Enabled = False
- Else
- MetroButton4.Enabled = True
- End If
- End Sub
- Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
- If e.KeyCode = Keys.Enter Then
- streamw.WriteLine(TextBox1.Text)
- streamw.Flush()
- TextBox1.Clear()
- End If
- End Sub
- Private Sub TextBox2_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox2.KeyDown
- If e.KeyCode = Keys.Enter Then
- streamw.WriteLine("/kick " & TextBox2.Text)
- streamw.Flush()
- TextBox2.Clear()
- End If
- End Sub
- Private Sub TextBox3_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox3.KeyDown
- If e.KeyCode = Keys.Enter Then
- streamw.WriteLine("/mute " & TextBox3.Text)
- streamw.Flush()
- TextBox3.Clear()
- End If
- End Sub
- Private Sub TextBox4_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox4.KeyDown
- If e.KeyCode = Keys.Enter Then
- streamw.WriteLine("/bcast " & TextBox4.Text)
- streamw.Flush()
- TextBox4.Clear()
- End If
- End Sub
- End Class
Befehle gehen dann vom zweiten User im übrigen garnicht mehr.
Bin über jede Hilfe dankbar.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Vainamo“ ()