等待应答时TCP连接冻结

时间:2014-09-26 08:10:50

标签: c# .net networking tcp

我最近开始使用.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;
    }

0 个答案:

没有答案