115 lines
3.8 KiB
VB.net
115 lines
3.8 KiB
VB.net
Imports System
|
|
Imports System.Net.Sockets
|
|
Imports System.Text
|
|
Module Program
|
|
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
|
|
msg($"### ERROR {ex.ToString}")
|
|
End Try
|
|
End While
|
|
End Sub
|
|
|
|
End Class
|
|
End Module
|