Неудачное подключение к серверу делает его непригодным для использования - PullRequest
0 голосов
/ 22 мая 2019

Я столкнулся с проблемой, когда несколько клиентов пытаются подключиться к серверу с одинаковыми учетными данными. На самом деле, когда клиент с такими же учетными данными уже подключен, будет отображаться сообщение клиенту, пытающемуся подключиться с этими учетными данными, но после этого больше не сможет подключиться больше клиентов. Я не получаю никаких исключений, ничего не ломается, но как только я проверяю состояние клиентского приложения в диспетчере задач, появляется сообщение «Не отвечает».

Клиентская функция для подключения к серверу:

    public TransferClass connectMe(TransferClass transfer)
    {
        try
        {
            if (!string.IsNullOrEmpty(transfer.ipAdr))
            {
                ipAdress = transfer.ipAdr.Trim();
            }
            client = new TcpClient(ipAdress, 10000);
            stream = client.GetStream();
            formatter = new BinaryFormatter();

            formatter.Serialize(stream, transfer);
            transfer = formatter.Deserialize(stream) as TransferClass;
            return transfer;
        }
        catch (Exception)
        {
            transfer.LoggedIn = false;
            return transfer;
        }
    }

Сервер прослушивания для клиентов:

    void listen()
    {
        try
        {
            while (true)
            {
                socket.Listen(50);
                Socket client = socket.Accept();
                NetworkStream stream = new NetworkStream(client);
                BinaryFormatter formatter = new BinaryFormatter();

                TransferClass transfer = formatter.Deserialize(stream) as TransferClass;
                transfer.LoggedIn = true;
                if (connectedList.ContainsKey(transfer.ClientID))
                {
                    transfer.LoggedIn = false;
                    formater.Serialize(stream, transfer);
                    return;
                }
         //code which is executed if everything is OK    
            }
         }
         catch (Exception)
         {
            throw;
         }
     }

Я могу успешно отладить клиент и сервер, но как только клиент попытается соединиться с тем же ClientID, сначала он проверяется на сервере, и сообщение о том, что он не LoggedIn, будет отправлено обратно клиент. Но после того, как я изменил ClientID и попытался снова подключиться, и последовал за ним с отладкой, он никогда не выходит на серверную сторону, как formatter.Serialize не работает на клиенте.

ClientID - это то, что клиент вводит сам.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...