2

This is my server code I have a problem because my program freeze and don't know what is wrong.

   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";
        }

My program freeze in line : Socket socketForClient = tcpl.AcceptSocket(); and don't know why. I wrote this on an example from school. Thanks for help.

Dominic Zukiewicz
  • 8,258
  • 8
  • 43
  • 61
Iposify
  • 663
  • 2
  • 7
  • 9

1 Answers1

6

AcceptSocket() is a blocking call that only returns after a client connects. If you call that in a UI thread, the UI will freeze.

You need to do that on a background thread.

SLaks
  • 868,454
  • 176
  • 1,908
  • 1,964