Http сервер и клиент. При попытке получить ответ клиента от сервера ошибка: Поток был недоступен для чтения - C#
Формулировка задачи:
Здравствуйте, пытаюсь разобраться с написанием клиент-серверного приложения используя сокеты. Написал в одном консольном проекте сервер:
В другом консольном проекте написал клиента:
Вот что происходит:
1. Запускаю сервер. Он начинает ожидать подключения клиента вызваз метод AcceptTcpClient().
2. Запускаю клиента. Он подключается к серверу.
3. Сервер принимает коннект и открывате потоки для записи и чтения и ждёт от клиента сообщение.
4. Клиент открывает поток для записи и отправляет сообщение серверу.
5. Сервер принимает сообщение от клиента, выводит на консоль и отправляет ответ серверу.
6. Клиент пытается открыть поток для чтения и вылетает exception: Поток был недоступен для чтения.
Не могу понять почему и как это исправить, помоги пожайлуста.
Так же у меня вопрос такой. нужно ли закрывать на сервере при переходе на следующую итерацию цикла do-will закрывать коннект у tcpClient, или это происходит внутри метода AcceptTcpClient() ?
А так же у меня вопрос вот такой. Вот я запустил сервер и хочу через браузер обратится к серверу и получить страничку html, как мне через браузер обратиться?
namespace HttpServer { class Program { static void Main(string[] args) { var server = new TcpListener(90); server.Start(); do { var tcpClient = server.AcceptTcpClient(); var networkStream = tcpClient.GetStream(); using (var streamReader = new StreamReader(networkStream)) using (var streamWriter = new StreamWriter(networkStream)) { Console.WriteLine("Request: " + streamReader.ReadLine()); streamWriter.Write("HTTP/1.1 200 OK\r\n\r\n"); streamWriter.Write("<h2>Hello from simplest HTTP server</h2>"); } } while (true); } } }
namespace HttpClient { class Program { static void Main(string[] args) { var client = new TcpClient(); do { client.Connect("localhost", 90); var networkStream = client.GetStream(); using (var streamWriter = new StreamWriter(networkStream)) streamWriter.Write("GET / HTTP/1.1"); using (var streamReader = new StreamReader(networkStream)) Console.WriteLine("Response: " + streamReader.ReadLine()); client.Close(); } while (true); } } }
Решение задачи: «Http сервер и клиент. При попытке получить ответ клиента от сервера ошибка: Поток был недоступен для чтения»
textual
Листинг программы
using (var streamReader = new StreamReader(networkStream)) Console.WriteLine("Response" + streamReader.ReadLine());
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д