2012-04-02 349 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將凍結。

你需要在後臺線程上做到這一點。