' Collection of code snippets by Arne Vajhøj ' posted to eksperten.dk, usenet and other places (2002-now) Imports System Imports System.Collections Imports System.IO Imports System.Net Imports System.Net.Sockets Imports System.Threading Class ChatMain Public Shared Sub Main(ByVal args As String()) Dim srv As Server = New Server srv.Run End Sub End Class Class Server Private allclients As ArrayList Public Sub Run() allclients = New ArrayList Dim server As TcpListener = New TcpListener(IPAddress.Any, 50000) server.Start While True Dim client As TcpClient = server.AcceptTcpClient Dim ch As ClientHandler = New ClientHandler(client, Me) allclients.Add(ch) Call (New Thread(AddressOf ch.Run)).Start End While End Sub Public Sub SendAll(ByVal msg As String) For Each ch As ClientHandler In allclients ch.Send(msg) Next End Sub Public Sub Remove(ByVal ch As ClientHandler) allclients.Remove(ch) End Sub End Class Class ClientHandler Private rdr As StreamReader Private wrt As StreamWriter Private srv As Server Public Sub New(ByVal cli As TcpClient, ByVal srv As Server) rdr = New StreamReader(cli.GetStream) wrt = New StreamWriter(cli.GetStream) Me.srv = srv End Sub Public Sub Run() While True Dim line As String = rdr.ReadLine Dim cmd As String = line.Split(" ".ToCharArray)(0) If cmd = "SEND" Then srv.SendAll(line.Substring(5)) Else If cmd = "EXIT" Then srv.Remove(Me) Return End If End If End While End Sub Public Sub Send(ByVal msg As String) SyncLock wrt wrt.WriteLine(msg) wrt.Flush End SyncLock End Sub End Class