Я хочу использовать VB.NET Console для отправки сообщений между двумя клиентами через сервер с использованием TCP / IP.Я использовал код этого YouTuber для создания очень простого клиентского приложения чата, где клиент чата подключается к серверу и отправляет сообщение, а затем сервер отправляет сообщение каждому подключенному клиенту, кроме отправителя..
Что я хочу сделать, но насколько мне известно, так это заставить сервер запоминать идентификатор клиента при его первом подключении и сохранить его в списке или массиве, содержащем соответствующую информацию о клиенте;затем каждый раз, когда клиент отправляет последующее сообщение, сервер проверяет идентификатор клиента и ищет его в массиве, правильно идентифицируя клиента перед выполнением действия.
Вот код (кредит Карло ДеСильва на YouTube), и я добавил после >> где я представляю, что может быть реализован код, который будет делать то, что я ищу.
Sub Main()
Try
'Create a new server using the local IP address (whatever it is)
_server = New TcpListener(IPAddress.Any, port)
_server.Start()
'Starts a new thread which listens for clients connecting.
Threading.ThreadPool.QueueUserWorkItem(AddressOf NewClient)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Console.ReadLine()
End Sub
Private Sub NewClient(state As Object)
Dim client As TcpClient = _server.AcceptTcpClient
Try
Threading.ThreadPool.QueueUserWorkItem(AddressOf NewClient)
_listOfClients.Add(client)
'Creates a new network stream receiving data from the client.
Dim ns As NetworkStream = client.GetStream
'>> Dim clientid = IDENTIFY CLIENT AFTER IT HAS CONNECTED
While True
'Creates a buffer
Dim toReceive(100000) As Byte
Dim length As Integer = ns.Read(toReceive, 0, toReceive.Length)
Dim text As String = Encoding.ASCII.GetString(toReceive, 0, length)
'>> BASED ON CLIENT ID, TAKE ACTION. (e.g. change text colour, add client name etc.)
For Each c As TcpClient In _listOfClients
If c IsNot client Then 'Sends a message to every other client besides this one.
Dim nns As NetworkStream = c.GetStream 'New Network Stream
nns.Write(Encoding.ASCII.GetBytes(text), 0, text.Length)
End If
Next
Console.WriteLine(text)
Console.WriteLine()
'Sends a received message receipt.
Dim message As String = "Message Received ..."
Dim toSend() As Byte = Encoding.ASCII.GetBytes(message)
ns.Write(toSend, 0, toSend.Length)
End While
Catch ex As Exception
If _listOfClients.Contains(client) Then
_listOfClients.Remove(client)
End If
Console.WriteLine(ex.Message)
End Try
End Sub
Я понимаю основные концепции этого кода с точки зренияотправка и получение сообщений, но я не знаю, какой метод мне следует использовать для идентификации клиента.Кто-нибудь может помочь?