我正在做一个实验,我得到了一个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/