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'