与服务器的连接失败,使其无法使用

时间:2019-05-22 05:40:16

标签: c# tcp

当多个客户端尝试使用相同的凭据连接到服务器时,我面临一个问题。实际上,当已经连接了具有相同凭据的客户端时,将显示一条消息,尝试使用这些凭据连接该客户端,但是此后不再有客户端可以连接。我没有收到任何异常,没有任何中断,但是一旦我在任务管理器中检查了客户端应用程序的状态,就会显示“无响应”。

用于连接服务器的客户端功能:

    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的客户端是否存在的部分中,我也应该关闭流或类似的操作,但是我不确定如何执行此操作。

0 个答案:

没有答案