我最近开始使用.NET编程并尝试进行小型网络游戏 Connection已正确设置,消息主要以正常行为写入和读取。但是在运行时的某个随机点上,读取流不能识别传入的消息。
通过Tcp侦听器和相应的流设置Connection。
//Get the network Stream
stream = client.GetStream();
w = new BinaryWriter(stream);
r = new BinaryReader(stream);
正如我之前所说的那样,沟通正在发挥作用,但似乎在随后的时间冻结了以下几点:
//Waiting for enemy to attack
public int ready()
{
try
{
while (r.ReadString() != ClientMessages.ATTACK) { }
Thread.Sleep(20);
return r.Read();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
throw new Exception("Dead");
}
}
总是一样的,它会陷入while循环中。无论我发送多少次"攻击"二进制阅读器似乎都没有注意到任何进一步的客户端消息。顺序。
但是这个程序并不是在没有人的地方......如果我关闭了连接,那么这个方法就会抛出它的连接丢失异常"和平常一样。
起初我以为我在这个方法中搞砸了一些东西,但在下面的例子中,我做的几乎一样,一切都很完美(或者至少似乎是......从来没有被困在这里点)
//Waiting for feedback
public int waitforfeedback()
{
try
{
while (r.ReadString() != ClientMessages.HIT) { }
Thread.Sleep(10);
return r.Read();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
throw new Exception("Dead");
}
}
问题可能是由后台工作者(我用来调用网络方法)引起的吗?
我该怎么做才能解决这个问题?
编辑:
根据要求,Backgroundworker代码:
private void waiting()
{
bw = new BackgroundWorker();
bw.DoWork += bw_DoWork;
bw.RunWorkerCompleted += bw_RunWorkerCompleted;
setter = true;
button.Content = "Waiting";
this.IsEnabled = false;
bw.RunWorkerAsync();
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
int hit = network.ready();
e.Result = hit;
}