Не могу понять как работает NetworkStream - C#

Узнай цену своей работы

Формулировка задачи:

Всем Привет! Есть код из Албахари:
Листинг программы
  1. static void Main()
  2. {
  3. new Thread(Server).Start();// Запустить метод сервера параллельно.
  4. Thread.Sleep(500);// Предоставить серверу время для запуска.
  5. Client();
  6. }
  7. static void Client()
  8. {
  9. using (TcpClient client = new TcpClient("localhost", 51111))
  10. using (NetworkStream n = client.GetStream())
  11. {
  12. BinaryWriter w = new BinaryWriter(n);
  13. w.Write("Hello");
  14. w.Flush();
  15. Console.WriteLine(new BinaryReader(n).ReadString()); // 1
  16. }
  17. }
  18. static void Server() // Обрабатывает одиночный клиентский запрос и завершается
  19. {
  20. TcpListener listener = new TcpListener(IPAddress.Any, 51111);
  21. listener.Start();
  22. using (TcpClient c = listener.AcceptTcpClient())
  23. using (NetworkStream n = c.GetStream())
  24. {
  25. string msg = new BinaryReader(n).ReadString();
  26. BinaryWriter w = new BinaryWriter(n);
  27. w.Write(msg + " right back!");
  28. w.Flush(); // Должен быть вызван метод Flush, поскольку
  29. } // мы не освобождаем средство записи,
  30. listener.Stop();
  31. }
  32. // Hello right back!
Мне не совсем понятно как работает NetworkStream. В коде я пометил строчку номером 1. Почему код в ней не вызывается сразу как инфа записана в поток NetworkStream и нам не выводится Hello? Как BinaryReader в этой строчке понимает что поток предназначен не ему а ТСПлистенеру? Каккая скрытая механика содержится в NetworkStream?

Решение задачи: «Не могу понять как работает NetworkStream»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Net;
  7. using System.Net.Sockets;
  8. using System.Threading;
  9.  
  10. class TcpDemo {
  11.     static void Main() {
  12.         new Thread(Server).Start();
  13.         Thread.Sleep(500);
  14.         Client();
  15.  
  16.         Console.ReadLine();
  17.     }
  18.     static void Client() {
  19.         using (TcpClient client = new TcpClient("localhost", 51111)) {
  20.             using (NetworkStream n = client.GetStream()) {
  21.                 BinaryWriter w = new BinaryWriter(n);
  22.                 w.Write("Hello");
  23.                 w.Flush();
  24.                 Console.WriteLine(new BinaryReader(n).ReadString());
  25.             }
  26.         }
  27.     }
  28.     static void Server() {
  29.         TcpListener listener = new TcpListener(IPAddress.Any, 51111);
  30.         listener.Start();
  31.         using (TcpClient client = listener.AcceptTcpClient()) {
  32.             using (NetworkStream n = client.GetStream()) {
  33.                 string msg = new BinaryReader(n).ReadString();
  34.                 BinaryWriter w = new BinaryWriter(n);
  35.                 w.Write(msg + " right back!");
  36.                 w.Flush();
  37.             }
  38.         }
  39.         listener.Stop();
  40.     }
  41. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы