TCP Client Losing Connection When Writing Data

45 views Asked by At

I'm developing a TCP Client-Server chat in C# using Windows Forms, following the example in the book "C# How to Program." It works perfectly for sending messages from the server UI to the client. However, when sending a message from the client, the connection closes.

After connection closes, it logs "The thread 0x2398 ended with code 0 (0x0)."

Server:

private void ExecServidor()
{
    TcpListener server;

    try
    {
        IPAddress local = IPAddress.Parse("127.0.0.1");
        server= new TcpListener(local, 50000);
        server.Start();
        while (true)
        {
            WriteMsg("Esperando conexión\n");

            conn = server.AcceptSocket();

            network = new NetworkStream(conexion);
            br = new BinaryReader(network);
            bw = new BinaryWriter(network);

            WriteMsg("Conexión aceptada\n");

            string res = "";

            do
            {

                try
                {
                    res = binaryReader.ReadString();
                    chatBox.AppendText(res + "\n");
                }
                catch
                {
                    break;
                }
            } while (res != "end");
            WriteMsg("connection ended\n");
            br.Close();
            bw.Close();
            network.Close();
            conn.Close();

        }


    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }


}

Client:

private void Connect()
{
    TcpClient client;
    try
    {
        client = new TcpClient();
        client.Connect("127.0.0.1", 50000);
        networkStream = cliente.GetStream();

        br = new BinaryReader(networkStream);
        bw = new BinaryWriter(networkStream);

        WriteMsg("new connection\n");
        do
        {
            try
            {
                mensaje = br.ReadString();
                WriteMsg(mensaje + "\n");
            }
            catch
            {
                break;
            }
        } while (message != "fin");

        client.Close();
        br.Close();
        bw.Close();
        networkStream.Close();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

private void button1_Click(object sender, EventArgs e)
{
    if (msgBox.Text.Length > 0)
    {
        bw.Write(msgBox.Text);
        WriteMsg(msgBox.Text + "\n");

       
       
    }
}

I expect the connection doesn't close and that the message is received correctly, until the server receives the message 'end'

0

There are 0 answers