2012-04-02 239 views
2

这是我的服务器代码我有一个问题,因为我的程序冻结,不知道什么是错的。服务器客户端应用程序

private void button1_Click(object sender, EventArgs e) 
    { 
     if (button1.Text == "Listen") 
     { 
      tcpl = new TcpListener(IPAddress.Any, 5555); 
      tcpl.Start(); 

      try 
      { 
       // get random word from text 
       OpenFileDialog ofd = new OpenFileDialog(); 
       ofd.Filter = "Txt |*.txt"; 
       ofd.Title = "Tekst"; 
       if (ofd.ShowDialog() == DialogResult.OK) 
       { 
        String[] myString = File.ReadAllLines(ofd.FileName); 
        textBox1.Text = myString[r.Next(myString.Length)]; 
       } 

        Socket socketForClient = tcpl.AcceptSocket(); 
        if (socketForClient.Connected) 
        { 
         MessageBox.Show("Client connected" + socketForClient.RemoteEndPoint.ToString()); 
         NetworkStream networkStream = new NetworkStream(socketForClient); 
         StreamWriter sw = new StreamWriter(networkStream); 
         StreamReader sr = new StreamReader(networkStream); 
         string line = sr.ReadLine(); 
         richTextBox1.Text = "Accepted: " + line; 
         line = line.ToUpper(); 
         sw.WriteLine(line); 
         richTextBox1.Text = "Sended : " + line; 
         sw.Flush(); 
        } 
        socketForClient.Close(); 

      } 
      catch (SocketException ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
      button1.Text = "stop"; 
     } 
     else 
     { 
      tcpl.Stop(); 
      MessageBox.Show("Disconnected"); 
      button1.Text = "Listen"; 
     } 

我的程序冻结在一行中:Socket socketForClient = tcpl.AcceptSocket();不知道为什么。我从学校的一个例子中写了这个。感谢帮助。

+1

Metro?的WinForms? WPF? Silverlight的? ASP.Net? MonoTouch的? – SLaks 2012-04-02 14:12:15

+0

它看起来不像WPF,因为它们有RoutedEventArgs,ASP.NET没有OpenFileDialog或MessageBox类...我猜Windows窗体。 – 2012-04-03 14:07:27

回答

6

AcceptSocket()是阻止呼叫,只有在客户端连接后才会返回。 如果您在UI线程中调用该UI,UI将冻结。

你需要在后台线程上做到这一点。

相关问题