'Why my server program prints the first letter of the message I sent from client in C#?

I am trying to send a message from a Socket client I created in C# on an Android device to a TCPListener server on my PC. The message is sent and I can see it printed on the output of the terminal as I programmed it to but now the server prints the first letter of the message only like when I send David, it only prints D. I need help to revise my code and make it print the entire message sent from the Android client. The code for the server program is below

static void Main(string[] args)
        {
            TcpListener server = null;
            try
            {
                
                //decide where the aplication will listen for connections
                int port = 13000;
                IPAddress localAddress = IPAddress.Parse("192.168.49.147");
                server = new TcpListener(localAddress, port);
                //start listening for client requests
                server.Start();
                //initialize buffer for reading data received from a client
                byte[] bytes = new byte[256];
                string? data;
                data = null;

                //enter into the listening loop
                while (true)
                {
                    Console.WriteLine("Listening for connections");
                    //perform a blocking call to accept requests
                    //You could also use a server.Accept() to accept an incoming connection
                    TcpClient client = server.AcceptTcpClient();
                    Console.WriteLine("Connected");

                    data = null;
                    //get a stream object for reading and writing
                    NetworkStream stream = client.GetStream();

                    int i;
                    //loop to receive all the data 
                    while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        //translate the byte received into ASCII encoded data
                        //something is wrong here as it prints the first character of the string
                        data = System.Text.Encoding.ASCII.GetString(bytes, 0, 1);
                        Console.WriteLine("Received: {0}", data);
                        //process the data sent ny the client
                        data.ToUpper();
                        byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

                        // Send back a response.
                        stream.Write(msg, 0, msg.Length);
                        Console.WriteLine("Sent: {0}", data);
                    }
                    //shut down and end connection
                    client.Close();
                }
            }catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                //stop listening for new connections
                server.Stop();
            }



        }


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source