【发布时间】:2014-05-18 06:01:21
【问题描述】:
我正在创建一个服务器,当客户端连接时,我创建了一个线程,它监听来自客户端的消息,所以基本上只是 StreamReader.Readline()
创建此answerListener 线程的线程必须等到answerListener 线程终止,但它不会等待。
这是我的代码的一部分
Thread answersListener = new Thread(new ThreadStart(StartListeningAnswers));
answersListener.Name = Thread.CurrentThread.Name + "_listener";
answersListener.Start();
while (player.status.Equals(PlayerStatus.Playing))
{
CheckOpponentStatus();
Thread.Yield();
}
DetermineResult(player.status);
answersListener.Join();
RuntimeInfo.Instance.playerList.TryDequeue(out player);
player.Input.Close();
player.Input.Dispose();
player.Output.Close();
player.Output.Dispose();
player.Socket.Close();
Console.WriteLine("client " + player.playerID + " disconnected");
player = null;
这就是StartListeningAnswers() 方法的作用:
while (player.status.Equals(PlayerStatus.Playing))
{
answer = player.Input.ReadLine();
if (answer == null) return;
}
这是StartListeningAnswers() 方法中的catch 块:
catch (IOException e)
{
Console.WriteLine(player.playerID + " Connected = " + player.Socket.Connected);
Console.WriteLine("ERROR: ReceiveAnswer from " + player.playerID);
return;
}
当我运行我的服务器时,我在尝试在 StartListeningAnswers() 中执行 ReadLine() 时遇到异常
我在控制台输出中有以下顺序:client 1 disconnected1 Connected = FalseERROR: ReceiveAnswer from 1
所以我猜主线程不会等到玩家发送一些东西,而是继续执行并关闭流。
我做错了什么?
【问题讨论】:
标签: c# multithreading inputstream streamreader