By: Issac Emailed: 1700 times Printed: 2202 times
A chat server program is one which listens to the connection request from clients and broadcasts the msg to all clients that are connected to it at that instant.
The VB.NET Multithreaded Chat Server Program has two sections.
- Chat Server
- Chat Client
Chat server keeps listening to PORT 8888 for any request from clients, once a request is received it adds the name of the client into a client list maintained (in this code it is a Hash table) and then creates a new thread for communication with server. When the Server gets a message from a client, it selects all the Clients from clientsList and sends the message to all Clients (ie we can say Broadcast) in the clientsList. So each Client can see the message each other and they can communicate through Chat Server.
The client list we implemented here in a HashTable. The clientsList stores the Client Name (ie the first message from Client) and an instance of the Client Socket.
When a Chat Client connected to Server, the Server creates a new Thread for communication. Here we implement a Class handleClient for handling Client as a separate Thread. The Class handleClient has a function doChat () is handling the communication between the Server side Client Socket and the incoming Client Socket.
When Server gets a message from any of the currently connected Chat Client, the Server Broadcast the message to all Clients using broadcast method for sending messages to all Clients.
Create a new VB.NET Console based application and put the following source code into the Project..
Imports System.Net.Sockets Imports System.Text Module Module1 Dim clientsList As New Hashtable Sub Main() Dim serverSocket As New TcpListener(8888) Dim clientSocket As TcpClient Dim counter As Integer serverSocket.Start() msg("Chat Server Started ....") counter = 0 While (True) counter += 1 clientSocket = serverSocket.AcceptTcpClient() Dim bytesFrom(10024) As Byte Dim dataFromClient As String Dim networkStream As NetworkStream = _ clientSocket.GetStream() networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize)) dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom) dataFromClient = _ dataFromClient.Substring(0, dataFromClient.IndexOf("$")) clientsList(dataFromClient) = clientSocket broadcast(dataFromClient + " Joined ", dataFromClient, False) msg(dataFromClient + " Joined chat room ") Dim client As New handleClinet client.startClient(clientSocket, dataFromClient, clientsList) End While clientSocket.Close() serverSocket.Stop() msg("exit") Console.ReadLine() End Sub Sub msg(ByVal mesg As String) mesg.Trim() Console.WriteLine(" >> " + mesg) End Sub Private Sub broadcast(ByVal msg As String, _ ByVal uName As String, ByVal flag As Boolean) Dim Item As DictionaryEntry For Each Item In clientsList Dim broadcastSocket As TcpClient broadcastSocket = CType(Item.Value, TcpClient) Dim broadcastStream As NetworkStream = _ broadcastSocket.GetStream() Dim broadcastBytes As [Byte]() If flag = True Then broadcastBytes = Encoding.ASCII.GetBytes(uName + " says : " + msg) Else broadcastBytes = Encoding.ASCII.GetBytes(msg) End If broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length) broadcastStream.Flush() Next End Sub Public Class handleClinet Dim clientSocket As TcpClient Dim clNo As String Dim clientsList As Hashtable Public Sub startClient(ByVal inClientSocket As TcpClient, _ ByVal clineNo As String, ByVal cList As Hashtable) Me.clientSocket = inClientSocket Me.clNo = clineNo Me.clientsList = cList Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf doChat) ctThread.Start() End Sub Private Sub doChat() 'Dim infiniteCounter As Integer Dim requestCount As Integer Dim bytesFrom(10024) As Byte Dim dataFromClient As String Dim sendBytes As [Byte]() Dim serverResponse As String Dim rCount As String requestCount = 0 While (True) Try requestCount = requestCount + 1 Dim networkStream As NetworkStream = _ clientSocket.GetStream() networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize)) dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom) dataFromClient = _ dataFromClient.Substring(0, dataFromClient.IndexOf("$")) msg("From client - " + clNo + " : " + dataFromClient) rCount = Convert.ToString(requestCount) broadcast(dataFromClient, clNo, True) Catch ex As Exception MsgBox(ex.ToString) End Try End While End Sub End Class End Module
View Tutorial By: Zero Code at 2009-07-16 14:05:14
View Tutorial By: andrew at 2009-07-24 14:10:24
View Tutorial By: ashu at 2010-11-02 08:13:00
View Tutorial By: Chitz at 2011-12-24 19:50:45
View Tutorial By: mmmm at 2012-03-31 00:44:41
Most Viewed Articles (in VB.net )
Most Emailed Articles (in VB.net)