当多个客户端尝试使用相同的凭据连接到服务器时,我面临一个问题。实际上,当已经连接了具有相同凭据的客户端时,将显示一条消息,尝试使用这些凭据连接该客户端,但是此后不再有客户端可以连接。我没有收到任何异常,没有任何中断,但是一旦我在任务管理器中检查了客户端应用程序的状态,就会显示“无响应”。
用于连接服务器的客户端功能:
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
的客户端是否存在的部分中,我也应该关闭流或类似的操作,但是我不确定如何执行此操作。