我正在做一个实验,我得到了一个streamreader和2个TcpClients streamreader继续从客户端1读取数据,从不从客户端2读取数据,直到客户端1发送内容
因此,如果客户端1从不发送任何内容,则流读取器将永远不会从客户端2进行读取

香港专业教育学院一直试图修复它

       while(true)
            {
             foreach (Client client in Clients)
                {
                    var sr = client.clientStreamReader;
                    string data;
                    try
                    {
                        if ((data = sr.ReadLine()) != null)
                        {
                             Console.WriteLine(data);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                    }
                }
          }


(客户端是用于保存流读取器并编写的类)

最佳答案

为每个客户端提供单独的线程,请尝试以下操作:

void ReadFromClient(Client client)
{
     var sr = client.clientStreamReader;
     string data;
     try
     {
       if ((data = sr.ReadLine()) != null)
       {
          Console.WriteLine(data);
       }
     }
     catch (Exception e)
    {
       Console.WriteLine(e);
    }
}


然后在每次启动新线程时遍历客户端:

foreach (Client client in Clients)
{
   Task.Factory.StartNew(new Action(() =>  ReadFromClient(client)) );
}

关于c# - 当2个客户端正在发送时,StreamReader.ReadLine挂起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47037356/

10-16 20:09