2012-04-02 7 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"; 
     } 

ラインで私のプログラムの凍結:ソケットsocketForClient = tcpl.AcceptSocket();なぜか分からない。私はこれを学校の例で書いた。手伝ってくれてありがとう。

+1

メトロ? WinForms? WPF? Silverlight? ASP.Net? MonoTouch? – SLaks

+0

WPFのようには見えませんが、RoutedEventArgsを持っているので、ASP.NETにはOpenFileDialogクラスやMessageBoxクラスがありません。Windowsフォームを推測しています。 –

答えて

6

AcceptSocket()は、クライアントが接続した後にのみ戻るブロッキング呼び出しです。 UIスレッドで呼び出すと、UIがフリーズします。

バックグラウンドスレッドで行う必要があります。

関連する問題