Как я могу определить клиента, когда он подключается к серверу, а затем запомнить клиента, когда он отправляет сообщение? - PullRequest
0 голосов
/ 25 ноября 2018

Я хочу использовать 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

Я понимаю основные концепции этого кода с точки зренияотправка и получение сообщений, но я не знаю, какой метод мне следует использовать для идентификации клиента.Кто-нибудь может помочь?

...