我正在做一个实验,我有一个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);
}
}
}
(客户端是一个保存streamreader并写入的类)
答案 0 :(得分:2)
使用单独的线程为每个客户提供服务,请尝试以下操作:
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)) );
}