在用tcpclient 和tcplistener 做个东西,客户端用streamreader.readline 总会造成卡死状态,请教下高手 我服务端成功接受到流并 streamwrite写入到流里了。客户端代码如下:
//ns已经定义了,ns=networkstream;
            try
            {
                tcpclnt = new TcpClient();
                tcpclnt.Connect("127.0.0.1", 8888);
                ns = tcpclnt.GetStream();                string host = System.Net.Dns.GetHostName();
                string qq = "PC id:" + host + "  " + txtname.Text + " : " + textBox2.Text; 
                sr = new StreamReader(ns);
                sw = new StreamWriter(ns);
                sw.WriteLine(qq);
                sw.Flush();                while (sta)
                {
                   
                    textBox1.AppendText(sr.ReadLine());
                    
                }
                textBox2.Text = "";
            }            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

解决方案 »

  1.   

     while (sta) sta是什么
      

  2.   

    加上试试
    finally
    {
       sr.Close(); 
       sw.Close();
    }
      

  3.   

    while (sta)
        { 
                      
         textBox1.AppendText(sr.ReadLine()); 
                        
        } 
    textBox2.Text = ""; 
    sr.Close(); 
    sw.Close();
      

  4.   

    楼上你给我的是个 socket的。我没用socket我用的 streamreader 来监听的。
      

  5.   

    接收到数据时,流已到了末尾
    所以要移到顶部if(sr.Length>0)
    {
      sr.BaseStream.Position = 0;
      textBox1.AppendText(sr.ReadLine()); 
    }
      

  6.   

    streamreader.readline 数据量少的时候没有什么大碍,但是数据量大的时候,不适合使用, 速度很慢的.
    就像刚出生的小孩再怎么厉害, 让他吃肯德基, 吃的再快也快不了哪里去...
      

  7.   

    上面错了一点if(sr.BaseStream.Length>0)
    {
      sr.BaseStream.Position = 0;
      textBox1.AppendText(sr.ReadLine()); 
    }
      

  8.   

    if(sr.readline().Length>0)
    {
      sr.BaseStream.Position = 0;
      textBox1.AppendText(sr.ReadLine()); 
    }是这样吗?  我加了进去,效果一样,我专门用messagesbox   show了一下 readline长度有了。 但是textbox1 还是加不进来字符。郁闷。。 咋回事呢