Клиент подключается к серверу, отправляет ему любое сообщение и в ответ получает длинную строку. Код чтения ответа:
   byte[] buffer = new byte[1024];
   int bytesRead = client.Receive(buffer, 0, buffer.Length, SocketFlags.None);
   string msg = Encoding.UTF8.GetString(buffer, 0, bytesRead);
   Console.WriteLine($"Answer: {msg}");
Понятно, что так он примет только первые 1024 байта. Как получить весь ответ, не увеличивая размер буфера? По-идее, цикл нужен. Но цикл виснет после нескольких итераций.
Код цикла:
   while (true)
   {
      byte[] buffer = new byte[1024];
      int bytesRead = client.Receive(buffer, 0, buffer.Length, SocketFlags.None);
      if (bytesRead == 0)
      {
          Console.WriteLine("zero");
          break;
      }
      string msg = Encoding.UTF8.GetString(buffer, 0, bytesRead);
      Console.WriteLine($"Answer: {msg.Length}");
   }
Сервер:
namespace Server
{
    internal class Program
    {
        static void Main(string[] args)
        {
            IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 5555);
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            server.Bind(endPoint);
            server.Listen(1);
            while (true)
            {
                Socket client = server.Accept();
                Console.WriteLine($"{client.RemoteEndPoint} is connected");
                while (true)
                {
                    try
                    {
                        byte[] buffer = new byte[1024];
                        int bytesRead = client.Receive(buffer, 0, buffer.Length, SocketFlags.None);
                        if (bytesRead == 0)
                        {
                            Console.WriteLine($"{client.RemoteEndPoint} is disconnected");
                            client.Shutdown(SocketShutdown.Both);
                            break;
                        }
                        string msg = Encoding.UTF8.GetString(buffer, 0, bytesRead);
                        Console.WriteLine(msg);
                        string answer;
                        string fn = "info.json";
                        if (File.Exists(fn))
                        {
                            answer = File.ReadAllText(fn);
                        }
                        else
                        {
                            answer = "fuck off";
                        }
                        SendMessage(client, answer);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        Console.WriteLine($"{client.RemoteEndPoint} is disconnected");
                        client.Shutdown(SocketShutdown.Both);
                        break;
                    }
                }
            }
            server.Shutdown(SocketShutdown.Both);
        }
        private static void SendMessage(Socket client, string msg)
        {
            byte[] msgBytes = Encoding.UTF8.GetBytes(msg);
            client.Send(msgBytes);
        }
    }
}
Клиент:
namespace Client
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string ip = "127.0.0.1";
            int port = 5555;
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            client.Connect(ip, port);
            if (client.Connected)
            {
                while (true)
                {
                    string s = Console.ReadLine();
                    if (s == "")
                    {
                        break;
                    }
                    byte[] bytes = Encoding.UTF8.GetBytes(s);
                    client.Send(bytes);
                    byte[] buffer = new byte[1024];
                    int bytesRead = client.Receive(buffer, 0, buffer.Length, SocketFlags.None);
                    string msg = Encoding.UTF8.GetString(buffer, 0, bytesRead);
                    Console.WriteLine($"Answer: {msg}");
                }
                client.Disconnect(false);
            }
            client.Shutdown(SocketShutdown.Both);
        }
    }
}
        